CXF实现用户验证
来源:互联网 发布:福州网络学校 编辑:程序博客网 时间:2024/06/05 10:08
CXF实现用户验证
1服务器端编写验证类
package Interceptor;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPMessage;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.NodeList;public class AuthorInterceptor extends AbstractPhaseInterceptor<SoapMessage>{private SAAJInInterceptor saa = new SAAJInInterceptor(); public AuthorInterceptor() { super(Phase.PRE_PROTOCOL); getAfter().add(SAAJInInterceptor.class.getName()); } public void handleMessage(SoapMessage message) throws Fault {System.out.println("come in ServicesAuthorInterceptor "); SOAPMessage mess = message.getContent(SOAPMessage.class); if (mess == null) { saa.handleMessage(message); mess = message.getContent(SOAPMessage.class); } SOAPHeader head = null; try { head = mess.getSOAPHeader(); } catch (Exception e) { e.printStackTrace(); } if (head == null) { return; } NodeList nodes = head.getElementsByTagName("tns:spId"); NodeList nodepass = head.getElementsByTagName("tns:spPassword"); if("zhong".equals(nodes.item(0).getTextContent())&&("guo".equals(nodepass.item(0).getTextContent()))){ System.out.println("认证成功"); }else {SOAPException soapExc = new SOAPException("认证错误");throw new Fault(soapExc);} System.out.println("6"); }}
2.配置公共过滤器xml文件
<!-- 公共过滤器 --><cxf:bus><cxf:inInterceptors><ref bean="AuthorInterceptor" /></cxf:inInterceptors></cxf:bus>
这样客户端在进行调用接口的时候会自动进行用户验证
3.编写客户端的验证代码
package InterCeptor;import org.apache.cxf.binding.soap.SoapHeader;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;import org.apache.cxf.headers.Header;import org.apache.cxf.helpers.DOMUtils;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Document;import org.w3c.dom.Element;import javax.xml.XMLConstants;import javax.xml.namespace.QName;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;public class HeaderIntercepter extends AbstractSoapInterceptor {private String qname;public HeaderIntercepter() {super(Phase.WRITE);}public void handleMessage(SoapMessage soapMessage) throws Fault {System.out.println("come in ClientHeaderIntercepter");String spName = "zhong";String spPassword = "guo";QName name = new QName("RequestSOAPHeader");Document doc = DOMUtils.createDocument();Element spId = doc.createElement("tns:spId");spId.setTextContent(spName);Element spPass = doc.createElement("tns:spPassword");spPass.setTextContent(spPassword);Element root = doc.createElementNS(qname, "tns:RequestSOAPHeader");root.appendChild(spId);root.appendChild(spPass);SoapHeader head = new SoapHeader(name, root);List<Header> headers = soapMessage.getHeaders();headers.add(head);}private Object getHeader() {QName qName = new QName("", "", "");Document document = DOMUtils.createDocument();Element element = document.createElementNS(qname, "RequestSOAPHeader");Element token = document.createElement("token");token.setTextContent("kkkkk");// element.appendChild(token);SoapHeader header = new SoapHeader(qName, token);return (header);}public String getQname() {return qname;}public void setQname(String qname) {this.qname = qname;}}
4.通过WSDl2Java自动生成服务端接口代理
5.客户端配置Spring的XML映射文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><import resource="classpath:META-INF/cxf/cxf.xml" /><import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /><import resource="classpath:META-INF/cxf/cxf-servlet.xml" /><bean id="inMessageInterceptor" class="InterCeptor.HeaderIntercepter"><property name="qname"value="http://localhost:8080/SpringCXF/services/GetUserInfo" /></bean><jaxws:client id="com.client.GetUserInfo" serviceClass="objectinterface.GetUserInfo"address="http://localhost:8080/SpringCXF/services/GetUserInfo"><jaxws:outInterceptors><ref bean="inMessageInterceptor" /></jaxws:outInterceptors></jaxws:client></beans>
6.......................最后直接进行接口调用就OK了
package com.client;import objectinterface.GetUserInfo;import objectinterface.User;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class GetUserInfoTest {public static void main(String[] args) throws Exception {User user = new User();ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");GetUserInfo userInfo = ctx.getBean("com.client.GetUserInfo", GetUserInfo.class);String xmlDoc = userInfo.xmlInfo();user = userInfo.getUserInfo("sa");System.out.println(user.getUsername());System.out.println("success");System.out.println(xmlDoc);}}
7.完成。
- CXF实现用户验证
- Apache CXF拦截器Interceptor实现WebServices用户验证
- Apache CXF拦截器Interceptor实现WebServices用户验证
- SpringBoot学习笔记之CXF集成(实现用户验证)
- CXF实现用户验证(相比前面的另外的一种方法完全Spring)
- Spring Boot & Apache CXF——简单的webservice,并实现用户验证
- cxf实现的ws_client(带安全验证)
- 实现用户验证
- webpy实现用户验证
- apache服务器实现用户验证
- Apache服务器实现用户验证
- Apache服务器实现用户验证
- Apache-HTTPClient 用户验证实现
- 实现邮箱验证用户注册
- Cxf+wss4j的WS-Security实现【未验证】
- 浅谈spingmvc 整合CXF +ws-security 实现webservice安全验证
- 浅谈spingmvc 整合CXF +ws-security 实现webservice安全验证
- 基于Spring+CXF实现用户文件上传的WebService
- 线程池工作原理和适用情况
- C++指针和引用的用法
- Android游戏编程之音频编程
- 电子书网址大全
- java10-集合框架
- CXF实现用户验证
- uva10004 Bicoloring
- 小点合集(android)
- 自己的工具包Tools
- 黑马程序员_单例设计模式
- 问题六十一: 在数组score中将要存储某小组C++程序设计的成绩.
- 【模式匹配】之——多模匹配 上篇(AC算法)
- ios NSUserDefaluts保存登录数据
- 最小生成树算法——Kruskal算法Java实现