拦截器是Cxf对其自身功能扩展的一个补充。如果你想在一个cxf服务增加一些功能(如:权限验证),你就可以考虑拦截器。
Cxf拦截器很简单,并且内置实现了很多拦截器,如日志拦截器
服务器端:
EndpointImpl objEndpointImpl = (EndpointImpl)Endpoint.publish(address, implementor);
objEndpointImpl.getInInterceptors().add(new LoggingInInterceptor());
objEndpointImpl.getOutInterceptors().add(new LoggingOutInterceptor());
添加俩个日志拦截器。
客户端也可以添加拦截器,如
JaxWsProxyFactoryBean objWsProxyFactoryBean = new JaxWsProxyFactoryBean();
objWsProxyFactoryBean.setAddress("http://127.0.0.1/helloService");
objWsProxyFactoryBean.setServiceClass(IHelloService.class);
objWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
当然,可以自定义拦截器。
Interceptor<Message>是cxf提供的拦截器接口,要自定义拦截器必须实现它;但我们更多选择是继承AbstractPhaseInterceptor。
如:
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;
public class DefineInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public DefineInterceptor(String phase) {
super(phase);
}
@Override
public void handleMessage(SoapMessage arg0) throws Fault {
List<Header> lstHeaders = arg0.getHeaders();
//你的处理逻辑
}
}
添加你的处理逻辑,之后把该拦截器加到服务器或客户端就行了。