加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService学习笔记-添加拦截器到基于Spring的Webservice

发布时间:2020-12-16 22:23:05 所属栏目:安全 来源:网络整理
导读:服务器端目录结构如图。在上一篇博文中的项目的基础上添加了一个interceptor类。 CheckUserInterceptor.java拦截器 package?com.umgsai.interceptors;import?javax.xml.namespace.QName;import?org.apache.cxf.binding.soap.SoapMessage;import?org.apache.c

服务器端目录结构如图。在上一篇博文中的项目的基础上添加了一个interceptor类。

wKioL1Q8kk-DplvyAADvU5BQWGQ196.jpg

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拦截器

wKiom1Q8koyBErjrAAD0uOR3F_o790.jpg

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://www.voidcn.com/article/p-zeqwdzeu-qg.html


本文出自 “优赛工作室” 博客,请务必保留此出处http://www.voidcn.com/article/p-cfoxeoci-qg.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读