博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java1234 webservice 第5 课 自定义拦截器
阅读量:7080 次
发布时间:2019-06-28

本文共 10352 字,大约阅读时间需要 34 分钟。

hot3.png

1.server端main方法

package com.java1234.webservice.impl;import javax.xml.ws.Endpoint;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;import com.java1234.interceptor.MyInterceptor;import com.java1234.webservice.HelloWorld;public class Server {	public static void main(String[] args) {		System.out.println("web service start");		HelloWorld implementor=new HelloWorldImpl();		String address="http://192.168.244.1/helloWorld";		// Endpoint.publish(address, implementor); // jdk实现 暴露webservice接口						JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();		factoryBean.setAddress(address); // 设置暴露地址		factoryBean.setServiceClass(HelloWorld.class); // 接口类		factoryBean.setServiceBean(implementor); // 设置实现类				factoryBean.getInInterceptors().add(new LoggingInInterceptor());//添加in拦截器,		factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());//添加out的拦截器		/*		 * 自定义拦截器, 权限认证		 */		factoryBean.getInInterceptors().add(new MyInterceptor());				factoryBean.create(); // 创建webservice接口						System.out.println("web service started");	}}

拦截器的实现

package com.java1234.interceptor;import java.util.List;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.common.security.UsernameToken;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;public class MyInterceptor extends    AbstractPhaseInterceptor
{ public MyInterceptor() { super(Phase.PRE_INVOKE); //在调用方法之前,调用自定义拦截器 } public void handleMessage(SoapMessage message) throws Fault { List
headers = message.getHeaders(); if(headers==null && headers.size()==0){ throw new Fault(new IllegalArgumentException("没有头,抛出异常")); } Header firstHeader = headers.get(0); Element ele=(Element ) firstHeader.getObject(); NodeList uList= ele.getElementsByTagName("userName"); NodeList pList= ele.getElementsByTagName("password"); if(uList.getLength()!=1){ throw new Fault(new IllegalArgumentException("用户名格式不对!")); } if(uList.getLength()!=1){ throw new Fault(new IllegalArgumentException("密码格式不对!")); } String username=uList.item(0).getTextContent(); String password=pList.item(0).getTextContent(); if(!username.equals("java1234") || !password.equals("123456") ){ throw new Fault(new IllegalArgumentException("用户密码错误!")); } }}

 

2.客户端 main方法

package com.java1234.webservice;import java.util.List;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import com.java1234.interceptor.AddHeaderInterceptor;public class Client {		 public static void main(String[] args) {		HelloWorldService service=new HelloWorldService();		HelloWorld helloWorld=service.getHelloWorldPort();								org.apache.cxf.endpoint.Client client= ClientProxy.getClient(helloWorld);						client.getOutInterceptors().add(new AddHeaderInterceptor("java1234","123456")); // 添加自定义拦截器				client.getInInterceptors().add(new LoggingInInterceptor());//添加		client.getOutInterceptors().add(new LoggingOutInterceptor());								/*		 *数据只能传输List
,不能传输map,所以map的key放入T中,便可以轻松传输! */ MyRoleArray arry = helloWorld.getRoles(); List
roleList= arry.item; for(int i=0; i

 

拦截器的实现:

package com.java1234.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
{ private String userName; private String password; public AddHeaderInterceptor(String userName,String password) { super(Phase.PREPARE_SEND); // 准备发送SOAP消息的时候调用拦截器 this.userName=userName; this.password=password; } public void handleMessage(SoapMessage message) throws Fault { List
headerList=message.getHeaders(); Document doc=DOMUtils.createDocument(); //创建作者节点 Element ele=doc.createElement("authHeader"); //创建一个节点 Element uElement=doc.createElement("userName"); uElement.setTextContent(userName); Element pElement=doc.createElement("password"); pElement.setTextContent(password); ele.appendChild(uElement); ele.appendChild(pElement); // aaa_QName 暂时可以自定义 headerList.add(new Header(new QName("aaa_QName"),ele)); } }

控制台:显示

client
八月 02, 2016 1:52:55 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL信息: Creating Service {http://webservice.java1234.com/}HelloWorldService from WSDL: http://192.168.244.1/helloWorld?wsdl八月 02, 2016 1:52:56 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld信息: Outbound Message---------------------------ID: 1Address: http://192.168.244.1/helloWorldEncoding: UTF-8Http-Method: POSTContent-Type: text/xmlHeaders: {Accept=[*/*], SOAPAction=[""]}Payload: 
java1234
123456
--------------------------------------八月 02, 2016 1:52:56 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld信息: Inbound Message----------------------------ID: 1Response-Code: 200Encoding: UTF-8Content-Type: text/xml; charset=UTF-8Headers: {content-type=[text/xml; charset=UTF-8], Date=[Tue, 02 Aug 2016 05:52:56 GMT], Server=[Jetty(9.2.11.v20150529)], transfer-encoding=[chunked]}Payload:
jack
3
程序员
java1234
1
技术总监
2
架构师
--------------------------------------jack:3,程序员========================java1234:1,技术总监2,架构师========================

 

server
八月 02, 2016 2:02:03 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld信息: Inbound Message----------------------------ID: 9Address: http://192.168.244.1/helloWorld?wsdlHttp-Method: GETContent-Type: text/xmlHeaders: {Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], content-type=[text/xml], Host=[192.168.244.1], Pragma=[no-cache], User-Agent=[Apache CXF 3.1.5]}--------------------------------------八月 02, 2016 2:02:04 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld信息: Inbound Message----------------------------ID: 10Address: http://192.168.244.1/helloWorldEncoding: UTF-8Http-Method: POSTContent-Type: text/xml; charset=UTF-8Headers: {Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], Content-Length=[276], content-type=[text/xml; charset=UTF-8], Host=[192.168.244.1], Pragma=[no-cache], SOAPAction=[""], User-Agent=[Apache CXF 3.1.5]}Payload: 
java1234
123456
--------------------------------------传入的信息是message:{javax.xml.ws.wsdl.port={http://webservice.java1234.com/}HelloWorldPort, org.apache.cxf.service.model.MessageInfo=[MessageInfo INPUT: {http://webservice.java1234.com/}getRoles], org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], Content-Length=[276], content-type=[text/xml; charset=UTF-8], Host=[192.168.244.1], Pragma=[no-cache], SOAPAction=[""], User-Agent=[Apache CXF 3.1.5]}, org.apache.cxf.interceptor.LoggingMessage.ID=10, HTTP_CONTEXT_MATCH_STRATEGY=stem, http.service.redirection=null, org.apache.cxf.request.url=http://192.168.244.1/helloWorld, javax.xml.ws.wsdl.interface={http://webservice.java1234.com/}HelloWorld, org.apache.cxf.request.uri=/helloWorld, HTTP.REQUEST=(POST /helloWorld)@8729297 org.eclipse.jetty.server.Request@8532d1, org.apache.cxf.transport.https.CertConstraints=null, HTTP.CONFIG=null, Accept=*/*, org.apache.cxf.headers.Header.list=[org.apache.cxf.binding.soap.SoapHeader@cb68d8], org.apache.cxf.message.Message.BASE_PATH=/helloWorld, org.apache.cxf.message.Message.PATH_INFO=/helloWorld, schema-validation-enabled=NONE, org.apache.cxf.continuations.ContinuationProvider=org.apache.cxf.transport.http_jetty.continuations.JettyContinuationProvider@50623e, javax.xml.ws.wsdl.service={http://webservice.java1234.com/}HelloWorldService, org.apache.cxf.message.Message.IN_INTERCEPTORS=[org.apache.cxf.transport.https.CertConstraintsInterceptor@101e5eb], org.apache.cxf.binding.soap.SoapVersion=org.apache.cxf.binding.soap.Soap11@19dc697, org.apache.cxf.message.Message.ENCODING=UTF-8, org.apache.cxf.message.Message.QUERY_STRING=null, HTTP.RESPONSE=HTTP/1.1 200 Date: Tue, 02 Aug 2016 06:02:04 GMT, org.apache.cxf.security.SecurityContext=org.apache.cxf.transport.http.AbstractHTTPDestination$2@161e60b, org.apache.cxf.configuration.security.AuthorizationPolicy=null, org.apache.cxf.async.post.response.dispatch=true, org.apache.cxf.request.method=POST, javax.xml.ws.wsdl.operation={http://webservice.java1234.com/}getRoles, org.apache.cxf.transport.Destination=org.apache.cxf.transport.http_jetty.JettyHTTPDestination@2bbfbc, org.apache.cxf.message.MessageFIXED_PARAMETER_ORDER=false, javax.xml.ws.wsdl.description=http://192.168.244.1:80/helloWorld?wsdl, http.base.path=http://192.168.244.1, org.apache.cxf.service.model.BindingMessageInfo=org.apache.cxf.service.model.BindingMessageInfo@38e338, HTTP.CONTEXT=ServletContext@o.e.j.s.h.ContextHandler@1dc0fec{/,null,AVAILABLE}, Content-Type=text/xml; charset=UTF-8}八月 02, 2016 2:02:04 下午 org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld信息: Outbound Message---------------------------ID: 10Response-Code: 200Encoding: UTF-8Content-Type: text/xmlHeaders: {}Payload:
jack
3
程序员
java1234
1
技术总监
2
架构师
--------------------------------------

 

 

转载于:https://my.oschina.net/u/1760858/blog/725613

你可能感兴趣的文章
cdn
查看>>
每一天的成长由此开始
查看>>
swift开发中如何将时间显示为几分钟前、几小时前、几天前、几个月前
查看>>
某店订单系统水平分库的实践之路以及关键步骤
查看>>
Oracle GoldenGate 快速安装配置实用指南
查看>>
我的友情链接
查看>>
iOS 图片合并 及截图
查看>>
easyui datagrid load 方法键不能为变量的解决
查看>>
分治的一次简单实践
查看>>
博为峰Java面试题-JavaSE I/O之File写入读出
查看>>
USER username (Login failed): Invalid shell: '/bin/false'
查看>>
我的友情链接
查看>>
Linux下整合Apache和Tomcat
查看>>
桌面图标右键选择发送到就会出现卡住假死
查看>>
关于旅行的文章..............搜集
查看>>
golang接口的使用(练习一)
查看>>
linux笔记之DNS服务配置(一)
查看>>
我的友情链接
查看>>
Nginx HTTP负载均衡和反向代理配置
查看>>
Redis 安装(一)
查看>>