CXF自定义拦截器的使用
来源:互联网 发布:小米手环抢购软件 编辑:程序博客网 时间:2024/06/13 13:42
首先,我们先准备好终端的接口和实现类
package com.webservice.ws;import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic interface HelloWS { @WebMethod public String sayHello(String name);}
实现类:
package com.webservice.ws;import javax.jws.WebService;@WebServicepublic class HelloWSImple implements HelloWS {@Overridepublic String sayHello(String name) {System.out.println("终端接口实现");return "Hello,"+name;}}
终端写完后,我们开始写服务器拦截器的代码,我们通过一个用户名和密码进行校验:
package com.webservice.interceptor;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;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;/** * 服务器端拦截器进行校验 * @author yxs * */public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage>{public CheckUserInterceptor() {super(Phase.PRE_PROTOCOL);}@Overridepublic void handleMessage(SoapMessage message) throws Fault { Header header=message.getHeader(new QName("Student")); if(header!=null){ Element Student=(Element)header.getObject(); String name=Student.getElementsByTagName("name").item(0).getTextContent(); String password=Student.getElementsByTagName("password").item(0).getTextContent(); if("scott".equals(name)&&"123456".equals(password)){ System.out.println("服务器端拦截器通过...."); return; } } System.out.println("服务器端拦截器没有通过...."); throw new Fault(new RuntimeException("请求需要一个正确的用户名和密码!"));}}
然后我们开始发布服务器端的代码:
package com.webservice.server;import java.util.List;import javax.xml.ws.Endpoint;import org.apache.cxf.interceptor.Interceptor;import org.apache.cxf.jaxws22.EndpointImpl;import org.apache.cxf.message.Message;import com.webservice.interceptor.CheckUserInterceptor;import com.webservice.ws.HelloWSImple;public class WbTest { public static void main(String[] args) {String address="http://localhost:8080/WebserviceDemo/helloWorld"; Endpoint endpoint = Endpoint.publish(address, new HelloWSImple()); System.out.println(endpoint); EndpointImpl endpointImpl=(EndpointImpl)endpoint; List<Interceptor<? extends Message>> inInterceptors = endpointImpl.getInInterceptors(); inInterceptors.add(new CheckUserInterceptor()); System.out.println("发布webservice成功");}}
接下来,我们需要通过cxf的wsdl2java生成客户端代码:
客户端代码生成后,我们就开始写客户端拦截器了:
package com.webservice.ws.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.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.apache.xml.utils.DOMHelper;import org.w3c.dom.Document;import org.w3c.dom.Element;/** * 客户端拦截器 * @author yxs * */public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage>{private String name;private String password;public AddUserInterceptor(String name,String password) {super(Phase.PRE_PROTOCOL);//准备协议时拦截this.name=name;this.password=password;}/* <Envelope> <head> <Student> <name>scott</name> <password>123456</password> </Student> <Student> <name>scott</name> <password>123456</password> </Student> <head> <Body> <sayHello> <arg0>scott</arg0> <sayHello> </Body> </Envelope> */@SuppressWarnings("deprecation")public void handleMessage(SoapMessage msg) throws Fault {List<Header> headers = msg.getHeaders();/** * <Student> <name>scott</name> <password>123456</password> </Student> */Document docuemnt= DOMHelper.createDocument();Element rootEle = docuemnt.createElement("Student");Element nameEle= docuemnt.createElement("name");nameEle.setTextContent(name);rootEle.appendChild(nameEle);Element passwordEle= docuemnt.createElement("password");passwordEle.setTextContent(password);rootEle.appendChild(passwordEle);headers.add(new Header(new QName("Student"), rootEle));System.out.println("客户端拦截器............");}}
拦截器写完后,我就开始写客户端的调用代码了:
package com.webservice.ws.test;import java.util.List;import org.apache.cxf.endpoint.Client;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.interceptor.Interceptor;import org.apache.cxf.message.Message;import com.webservice.ws.HelloWS;import com.webservice.ws.HelloWSImpleService;import com.webservice.ws.interceptor.AddUserInterceptor;public class ClientTest { public static void main(String[] args) { HelloWSImpleService factory=new HelloWSImpleService(); HelloWS helloWSImplePort = factory.getHelloWSImplePort(); Client client = ClientProxy.getClient(helloWSImplePort); List<Interceptor<? extends Message>> outInterceptors = client.getOutInterceptors(); outInterceptors.add(new AddUserInterceptor("scott","123456")); String info=helloWSImplePort.sayHello("mike"); System.out.println("client:"+info); System.out.println("client==================="); }}
ok,大功告成。
0 0
- CXF自定义拦截器的使用
- CXF自定义拦截器
- CXF 自定义拦截器
- 使用cxf时拦截器的使用
- cxf自定义用户拦截器
- CXF添加自定义拦截器
- CXF添加自定义拦截器
- CXF拦截器(Interceptor)的使用
- CXF之日志拦截器的使用
- webservice框架CXF拦截器的使用
- 【WebService】CXF拦截器的设置以及自定义CXF拦截器
- 自定义cxf 拦截器,解决cxf误拦截js/css
- 使用CXF为Web Service添加拦截器,自定义拦截器
- WebServices中使用cxf开发日志拦截器以及自定义拦截器
- CXF学习07---自定义拦截器
- CXF自定义拦截器实现权限控制
- CXF实战之自定义拦截器(五)
- WEB-Service CXF自定义拦截器
- mac 复制到剪贴板
- sql server 2008Windows防火墙
- UVA 10817 Headmaster's Headache(状压DP)
- 原码,反码,补码 详解
- HDU 4681 String
- CXF自定义拦截器的使用
- 2015.9.4第三场组队赛
- 欢迎使用CSDN-markdown编辑器
- Linux下编程-----文件与IO(二)stat函数
- Codeforces Gym 100339I Sum vs Product 剪枝搜索
- php pdo学习笔记
- Device eth0 does not seem to be present,delaying initialization.
- MFC中获得各个类的指针/句柄 ID的总结
- HDU 5035 Delivery (2014年北京赛区网络赛D题)