一 服务端
1 创建一个服务端的web工程,导入jar包
2 编写webservice的接口和实现类。
2 编写服务器端的入拦截器,该类继承AbstractPhaseInterceptor
package com.spring.wl.auth;
import java.util.List;
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;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
//PhaseInterceptor 可以指定拦截器在哪个阶段起作用
public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public AuthInterceptor() {
super(Phase.PRE_INVOKE);//调用之前拦截soap消息
System.out.println("服务器端拦截器初始化");
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
System.out.println("服务端拦截器="+msg);
List<Header>headers=msg.getHeaders();
if( headers==null||headers.size()<=0){
throw new Fault(new IllegalArgumentException("没有header 不能调用"));
}
Header firstHeader=headers.get(0);
Element ele=(Element)firstHeader.getObject();
NodeList userIds= ele.getElementsByTagName("userId");
NodeList passwards= ele.getElementsByTagName("password");
System.out.println("用户名个数="+userIds.getLength());
System.out.println("密码个数="+passwards.getLength());
if(userIds.getLength()!=1 || passwards.getLength()!=1 ){
throw new Fault(new IllegalArgumentException("格式不对"));
}
String userId= userIds.item(0)