服务器端目录结构如图。在上一篇博文中的项目的基础上添加了一个interceptor类。
CheckUserInterceptor.java拦截器
package com.umgsai.interceptors;
import javax.xml.namespace.QName;
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;
//检查用户的 拦截器
public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public CheckUserInterceptor() {
super(Phase.PRE_PROTOCOL);// 准备协议化时拦截
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
Header header = message.getHeader(new QName("atguigu"));
if (header != null) {
Element element = (Element) header.getObject();
String username = element.getElementsByTagName("username").item(0).getTextContent();
String password = element.getElementsByTagName("password").item(0).getTextContent();
if (username.equals("umgsai")&&password.equals("123456")) {
System.out.println("通过拦截器...");
return;
}
}
//不能通过
System.out.println("没有通过拦截器");
throw new Fault(new RuntimeException("用户名或密码不正确"));
}
}
beans-xml配置拦截器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- 引入CXF的核心配置 --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="orderWS" implementor="com.umgsai.ws.impl.OrderWSImpl" address="/orderWS"> <jaxws:inInterceptors> <bean class="com.umgsai.interceptors.CheckUserInterceptor"> </bean> </jaxws:inInterceptors> </jaxws:endpoint> </beans>
客户端拦截interceptor拦截器
AddUserInterceptor.java拦截器
package com.umgsai.ws.interceptors;
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.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.xml.utils.DOMHelper;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String username;
private String password;
public AddUserInterceptor(String username, String password) {
super(Phase.PRE_PROTOCOL);// 准备协议化时拦截
this.username = username;
this.password = password;
System.out.println("创建AddUserInterceptor实例...");
}
/*
*
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<atguigu>
<username>umgsai</username>
<password>123456</password>
</atguigu>
</soap:Header>
<soap:Body>
<ns1:sayHi xmlns:ns1="http://demo.com/">
<text>test~~~</text>
</ns1:sayHi>
</soap:Body>
</soap:Envelope>
*
* */
@Override
public void handleMessage(SoapMessage message) throws Fault {
List<Header> headers = message.getHeaders();
Document document = DOMHelper.createDocument();
Element rootElement = document.createElement("atguigu");
Element usernameElement = document.createElement("username");
usernameElement.setTextContent(username);
rootElement.appendChild(usernameElement);
Element passwordElement = document.createElement("password");
passwordElement.setTextContent(password);
rootElement.appendChild(passwordElement);
headers.add(new Header(new QName("atguigu"), rootElement));
System.out.println("拦截...");
}
}
beans-client.xml 配置客户端拦截器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <jaxws:client id="orderClient" serviceClass="com.umgsai.ws.OrderWS" address="http://localhost:8080/WS_spring/orderWS"> <jaxws:outInterceptors> <bean class="com.umgsai.ws.interceptors.AddUserInterceptor"> <constructor-arg name="username" value="umgsai"/> <constructor-arg name="password" value="123456"/> </bean> </jaxws:outInterceptors> </jaxws:client> </beans>
参考 http://shamrock.blog.51cto.com/2079212/1563384
转载于:https://blog.51cto.com/shamrock/1563800