cxf在客户端定义output 添加用户名、密码
public static void main(String[] args) {
HelloWs wsClient=new HelloWs();
HelloWorld hws = wsClient.getHelloWorldImplPort();
Client client = ClientProxy.getClient(hws);
client.getOutInterceptors().add(new AuthInterceptor("test" ,"00"));
}
第二步添加用户名、密码头信息
package cn.xjs.util;
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 AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String username;
private String pass;
public AuthInterceptor(String username ,String pass) {
super(Phase.PREPARE_SEND);
this.username=username;
this.pass=pass;
}
@Override
public void handleMessage(SoapMessage mess) throws Fault {
List<Header> headers = mess.getHeaders();
//生成 xml
Document doc = DOMUtils.createDocument();
Element ele = doc.createElement("authHeader");
Element idEle = doc.createElement("userId");
idEle.setTextContent(this.username);
Element passEle = doc.createElement("pass");
passEle.setTextContent(this.pass);
ele.appendChild(idEle);
ele.appendChild(passEle);
/**
上面代码生成了xml
<authHeader>
<userId>aaa</userId>
<userPass>bbb</userPass>
</authHeader>
**/
//把ele元素包装成Header,并添加到soap消息的
headers.add(new Header(new QName("fkjava"), ele));
}
}