前面大家学过servlet,struts2 都有拦截器概念,主要作用是做一些权限过滤,编码处理等;
webservice也可以加上拦截器,我们可以给webservice请求加权限判断功能;
webservice分服务端和客户端,服务端和客户端都是可以加拦截器的,无论是服务端还是客户端,都分进,出(In,Out)拦截器;
服务端:
package com.gcx.test;
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.gcx.service.HelloWorld;
import com.gcx.service.impl.HelloWorldImpl;
public class ServerTest {
public static void main(String[] args) {
System.out.println("webService start");
HelloWorld implementor=new HelloWorldImpl();
String address="http://192.168.31.42/helloWorld";
//通过JDK实现暴露webService接口
//Endpoint.publish(address, implementor);
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.create();//创建webService接口
System.out.println("webService end");
}
}
package com.gcx.service;
import java.util.List;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
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.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
MyRoleArray roles = helloWorld.getRoles();
List<MyRole> item = roles.item;
for(int i=0;i<item.size();i++){
MyRole myRole = item.get(i);
System.out.print(myRole.key+":");
for(Role my:myRole.value){
System.out.print(my.getId()+","+my.getRoleName());
}
System.out.println("==");
}
}
}
这里的打印出来的就是日志信息:Inbound 进信息 Outbound 是出信息,进的时候,大家会看到有个Headers SOAP消息。后面我们可以在里面加我们的数据;
在Outbound Message里,Payload消息里我们可以找到webservice返回的数据 SOAP消息
服务端日志:
客户端日志:
这里的话,我们用到了ClientProxy,客户端代理
OK到这里的话,添加拦截器已经完了!!