专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 用CXF为Web Service添加拦截器

用CXF为Web Service添加拦截器

更新时间:2020-09-18 17:20:17 来源:动力节点 浏览981次

Web Service的拦截器分为Service端和Client端,拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理。用CXF为Web Service添加拦截器的方式有两种分别为为CXF自带的拦截器和自定义的拦截器。

1.Service端:

通过将org.apache.cxf.jaxws.EndpointImpl类的方法即可实现

发布Web Service 方法可以通过Endpoint.publish()方法,此方法返为EndpointImpl,所以为Service端添加拦截器很简单。

部分代码:

UserService us = new UserServiceImpl();

String address = "http://192.168.10.254:9999/crazyit";

EndpointImpl ep = (EndpointImpl)Endpoint.publish(address , us);

//下面方法就可以添加拦截器(CXF提供的拦截器)

//cxf-2.2.10.jar org.apache.cxf.interceptor.* (CXF提供的拦截器)

ep.getOutInterceptors().add(new LoggingOutInterceptor());

ep.getInInterceptors().add(new LoggingInInterceptor());

ep.getInInterceptors().add(new AuthIntercetpr()); //此拦截器是自定义的拦截器。

2.Client端 客户端可以通过对org.apache.cxf.frontend.ClientProxy中的getClient()方法获取org.apache.cxf.endpoint.Client对象,该对象可以为客户端添拦截器。

部分代码

//为客户端添加拦截器

org.apache.cxf.endpoint.Client client = ClientProxy.getClient(us);

client.getInInterceptors().add(new LoggingInInterceptor());

client.getOutInterceptors().add(new LoggingOutInterceptor());

//自定义拦截器

client.getOutInterceptors().add(new AddHeaderInterceptor("crazyit" , "crazyit.org2"));

3.自定义的拦截器

自定义拦截器需要继承org.apache.cxf.phase.AbstractPhaseInterceptor 抽象类,并实现其handleMessage方法,与重写自定义的构造器(由于AbstractPhaseInterceptor 没有无参构造器,所以要在自定义构拦截器的造器中调用supper(带参数))。

部分代码

public class AuthIntercetpr extends AbstractPhaseInterceptor{

public AuthIntercetpr() {

//子类总会调用父类的构造器,

//默认是调用无参数的构造器。

//指定该拦截器在哪个阶段被激发

super(Phase.PRE_INVOKE);

}

//处理消息

public void handleMessage(SoapMessage message) {

System.out.println("==================" + message);

//获取SOAP消息的全部头

List

headers = message.getHeaders();


if(headers.size() < 1) {

throw new Fault(new SOAPException("SOAP消息头格式不对哦!"));

}

for(Header header : headers) {

SoapHeader soapHeader = (SoapHeader)header;

//取出SOAP的Header元素

Element element = (Element)soapHeader.getObject();

checkSOAPHeader(element);

}

}

以上就是CXF为Web Service添加拦截器的方法,这三种拦截器各有优劣势,我们在选用的过程中可以根据实际需求择优选取,以达到更好的代码编写效果。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>