WebService學習筆記-添加攔截器到基於Spring的Webservice

服務器端目錄結構如圖。在上一篇博文中的項目的基礎上添加了一個interceptor類。
java

wKioL1Q8kk-DplvyAADvU5BQWGQ196.jpg

CheckUserInterceptor.java攔截器spring

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配置攔截器
apache

<?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攔截器服務器

wKiom1Q8koyBErjrAAD0uOR3F_o790.jpg

AddUserInterceptor.java攔截器app

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 配置客戶端攔截器
dom

<?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 ide

相關文章
相關標籤/搜索