客户端:出拦截器
服务器:入拦截器
客户端
AddUserInterceptor.java
package com.demo.interceptors; 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;//使用xalan-2.7.1.jar import org.w3c.dom.Document; import org.w3c.dom.Element; public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private String username; private String password; public AddUserInterceptor(String username, String password) { super(Phase.PRE_PROTOCOL);// 准备协议化时拦截 this.username = username; this.password = password; } /* * 消息格式 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <atguigu> <username>umgsai</username> <password>123456</password> </atguigu> </soap:Header> <soap:Body> <ns1:sayHi xmlns:ns1="http://demo.com/"> <text>test~~~</text> </ns1:sayHi> </soap:Body> </soap:Envelope> * * */ @Override public void handleMessage(SoapMessage message) throws Fault { List<Header> headers = message.getHeaders(); Document document = DOMHelper.createDocument(); Element rootElement = document.createElement("atguigu"); Element usernameElement = document.createElement("username"); usernameElement.setTextContent(username); rootElement.appendChild(usernameElement); Element passwordElement = document.createElement("password"); passwordElement.setTextContent(password); rootElement.appendChild(passwordElement); headers.add(new Header(new QName("atguigu"), rootElement)); System.out.println("拦截..."); } }
InterceptorHelloWorldClient.java 客户端添加拦截器
package com.demo; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyfactorybean; import com.demo.HelloWorld; import com.demo.User; import com.demo.interceptors.AddUserInterceptor; //http://blog.csdn.net/fhd001/article/details/5778915 public class InterceptorHelloWorldClient { public static void main(String[] args) { JaxWsProxyfactorybean svr = new JaxWsProxyfactorybean(); svr.setServiceClass(HelloWorld.class); svr.setAddress("http://localhost:8080/helloWorld"); HelloWorld hw = (HelloWorld) svr.create(); // jaxws API 转到 cxf API 添加日志拦截器 org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy .getClient(hw); org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint(); //添加日志拦截器 cxfEndpoint.getoutInterceptors().add(new LoggingOutInterceptor()); //添加自定义的拦截器 cxfEndpoint.getoutInterceptors().add(new AddUserInterceptor("umgsai", "123456")); User user = new User(); user.setUsername("Umgsai"); user.setDescription("test"); System.out.println(hw.sayHiToUser(user)); //String sayHi = hw.sayHi("test~~~"); //System.out.println(sayHi); } }
服务器端
CheckUserInterceptor.java 拦截器
package com.demo.interceptors; 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; //检查用户的 拦截器 public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> { public CheckUserInterceptor() { super(Phase.PRE_PROTOCOL);// 准备协议化时拦截 } @Override public void handleMessage(SoapMessage message) throws Fault { Header header = message.getHeader(new QName("atguigu")); if (header != null) { Element element = (Element) header.getobject(); String username = element.getElementsByTagName("username").item(0).getTextContent(); String password = element.getElementsByTagName("password").item(0).getTextContent(); if (username.equals("umgsai")&&password.equals("123456")) { System.out.println("通过拦截器..."); return; } } //不能通过 System.out.println("没有通过拦截器"); throw new Fault(new RuntimeException("用户名或密码不正确")); } }
InterceptorServerApp.java 将服务器端拦截器添加到服务端
package com.demo; import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.jaxws.EndpointImpl; import com.demo.interceptors.CheckUserInterceptor; public class InterceptorServerApp { public static void main(String[] args) { System.out.println("Starting web service... "); HelloWorldImpl implementor = new HelloWorldImpl(); String address = "http://localhost:8080/helloWorld"; Endpoint endpoint = Endpoint.publish(address, implementor); // jaxws API 转到 cxf API 添加日志拦截器 EndpointImpl jaxwsEndpointImpl = (EndpointImpl) endpoint; org.apache.cxf.endpoint.Server server = jaxwsEndpointImpl.getServer(); org.apache.cxf.endpoint.Endpoint cxfEndpoint = server.getEndpoint(); //添加日志拦截器 LoggingInInterceptor logging = new LoggingInInterceptor(); cxfEndpoint.getininterceptors().add(logging); //添加自定义拦截器 cxfEndpoint.getininterceptors().add(new CheckUserInterceptor()); System.out.println("Web service started"); } }
参考尚硅谷教程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。