Cxf拦截器
来源:互联网 发布:js生态圈 编辑:程序博客网 时间:2024/04/28 05:47
服务器端
拦截器类:
package ws.interceptor;import java.util.List;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPMessage;import org.apache.cxf.aegis.xml.stax.ElementWriter;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;import org.apache.cxf.headers.Header;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Element;import org.w3c.dom.NodeList;/** * 继承AbstractPhaseInterceptor拦截类 * @author Administrator * */public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {private SAAJInInterceptor saa = new SAAJInInterceptor();public AuthInterceptor() {//显示调用父类有参数构造super(Phase.PRE_INVOKE); //该拦截器将会在调用之前拦截soap消息}/* * 实现自己的拦截器时 需要实现handleMessage方法 * handleMessage中的形参就是拦截到的soap消息 * 一旦获取到soap消息,剩下的事就是解析soap消息或者修改soap消息 */@Overridepublic void handleMessage(SoapMessage message) throws Fault {System.out.println("--------------拦截到"+message);//得到soap消息的所有headerList<Header> headers=message.getHeaders();//没有headerif(headers==null || headers.size()<1){SOAPException soapExc = new SOAPException("异常,没有Hearder消息");throw new Fault(soapExc);}//如果要求第一个hearder携带了用户名和密码Header firstHeader=headers.get(0);Element ele=(Element)firstHeader.getObject();NodeList userIdNode = ele.getElementsByTagName("userid");NodeList userPassNode = ele.getElementsByTagName("userpass");if(userIdNode.getLength()!=1){throw new Fault(new SOAPException("异常,用户名格式不对"));}if(userPassNode.getLength()!=1){throw new Fault(new SOAPException("异常,密码格式不对"));}String userId=userIdNode.item(0).getTextContent();String userPass=userPassNode.item(0).getTextContent();System.out.println(userId+":"+userPass);if (userId.equals("gt") && userPass.equals("123456")) {System.out.println("认证成功");} else {throw new Fault(new SOAPException("认证错误"));}}}
集成spring配置:
<bean id="interceptor1" class="ws.interceptor.AuthInterceptor"></bean><jaxws:endpoint id="hello" implementor="#service1" address="/HelloWorldService" ><jaxws:inInterceptors><bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean><ref bean="interceptor1"/></jaxws:inInterceptors></jaxws:endpoint>
客户端
拦截器类:
package interceptor;import java.util.List;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;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;public class AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {private String userId;private String userPass;public AddHeaderInterceptor(String userId,String userPass) {super(Phase.PREPARE_SEND);this.userId=userId;this.userPass=userPass;}@Overridepublic void handleMessage(SoapMessage message) throws Fault {List<Header> headers=message.getHeaders();//创建doc对象Document doc=DOMUtils.createDocument();Element ele=doc.createElement("authorHeader");//此处元素应该按照服务器那边的要求Element idEle=doc.createElement("userid");idEle.setTextContent(userId);Element passEle=doc.createElement("userpass");passEle.setTextContent(userPass);ele.appendChild(idEle);ele.appendChild(passEle);//把ele元素包装成Header,并添加到Soap的Headers列表中headers.add(new Header(new QName("gt-gt"),ele));}}
调用类:
HelloGT gt=new HelloGT();HelloWorld hello=gt.getHelloWorldImplPort();Client client=ClientProxy.getClient(hello);client.getOutInterceptors().add(new AddHeaderInterceptor("gt","123456"));client.getOutInterceptors().add(new LoggingOutInterceptor());User user=new User();
- cxf拦截器学习
- Cxf 拦截器
- Cxf拦截器
- CXF自定义拦截器
- CXF 自定义拦截器
- cxf 拦截器入门
- Cxf - 拦截器
- cxf消息拦截器
- CXF拦截器
- CXF 框架拦截器
- webservice cxf 拦截器
- cxf拦截器
- CXF Interceptor拦截器
- cxf 拦截器
- cxf拦截器学习
- CXF添加拦截器
- CXF添加拦截器
- CXF拦截器
- MYSQL数据类型详细介绍
- 融资750万美元,Prism Skylabs释放监控录像的价值,做线下店铺的Google Analytics
- 注重原则和智慧结晶——读《浮现式设计》有感
- create table as
- WIN7_64位系统安装oracle以及PLSQL方法
- Cxf拦截器
- POJ2389《Bull Math》方法:高精度 模拟
- Data Guard——使用 RMAN 创建单实例物理(physical) standby 数据库
- winsock重叠IO模型
- 常用中文字体英文名称对照表
- 网站登录中的验证码作用
- 配置内核并使用iptables做端口映射
- linux grep 使用
- MySQL安装图文详解