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

webservice学习笔记(6)--spring结合xsf拦截器

发布时间:2020-12-16 21:54:27 所属栏目:安全 来源:网络整理
导读:/** * @文件名称: Order.java * @描述: TODO * @作者: 一叶扁舟(skiff) * @时间:2017年2月23日 上午9:47:35 * @版本:V1.0 */package www.skiff.cn.webservice.domain;/** * @类功能说明: * @作者: 一叶扁舟 (skiff) * @创建时间:2017年2月23日 上午9:4
/**     
 * @文件名称: Order.java   
 * @描述: TODO  
 * @作者:  一叶扁舟(skiff)
 * @时间:2017年2月23日 上午9:47:35  
 * @版本:V1.0     
 */
package www.skiff.cn.webservice.domain;

/**
 * @类功能说明:
 * @作者: 一叶扁舟 (skiff)
 * @创建时间:2017年2月23日 上午9:47:35
 * @版本:V1.0
 */
public class Order {
	private Long id;
	private String name;
	private double price;
	
	/**  
	 *@param price 
	 * @param name 
	 * @param id 
	 * @类名:Order.java  
	 *@描述:{todo}    
	 */ 
	public Order(long id,String name,int price) {
		this.id = id;
		this.name = name;
		this.price = price;
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the price
	 */
	public double getPrice() {
		return price;
	}

	/**
	 * @param price the price to set
	 */
	public void setPrice(double price) {
		this.price = price;
	}
	
}



package www.skiff.cn.webservice.interceptor;

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;

/**  
 * @类功能说明:    服务端的拦截器
 * @作者: 一叶扁舟 (skiff)
 * @创建时间:2017年2月23日 下午12:05:22  
 * @版本:V1.0  
 */  
public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> { 
	public CheckUserInterceptor() {
		super(Phase.PRE_PROTOCOL);
		System.out.println("CheckUserInterceptor()");
	}

	/*
 	<Envelope>
 		<head>
 			<atguigu>
 				<name>xfzhang</name>
 				<password>123456</password>
 			</atguigu>
 			<atguigu2>
 				<name>xfzhang</name>
 				<password>123456</password>
 			</atguigu2>
 		<head>
 		<Body>
 			<sayHello>
 				<arg0>BOB</arg0>
 			<sayHello>
 		</Body>
 	</Envelope>
 */
	@Override
	public void handleMessage(SoapMessage message) throws Fault {
		Header header = message.getHeader(new QName("atguigu"));
		if(header!=null) {
			Element atguiguEle = (Element) header.getObject();
			String name = atguiguEle.getElementsByTagName("name").item(0).getTextContent();
			String password = atguiguEle.getElementsByTagName("password").item(0).getTextContent();
			if("xfzhang".equals(name) && "123456".equals(password)) {
				System.out.println("Server 通过拦截器....");
				return;
			}
		}
		//不能通过
		System.out.println("Server 没有通过拦截器....");
		throw new Fault(new RuntimeException("请求需要一个正确的用户名和密码!"));
	}

}


/**     
 * @文件名称: OrderWSImpl.java   
 * @描述: TODO  
 * @作者:  一叶扁舟(skiff)
 * @时间:2017年2月23日 上午10:00:15  
 * @版本:V1.0     
 */ 
package www.skiff.cn.webservice.ws.impl;

import www.skiff.cn.webservice.domain.Order;
import www.skiff.cn.webservice.ws.IOrderWS;

/**  
 * @类功能说明:    
 * @作者: 一叶扁舟 (skiff)
 * @创建时间:2017年2月23日 上午10:00:15  
 * @版本:V1.0  
 */
public class OrderWSImpl implements IOrderWS {

	
	/**  
	 *@类名:OrderWSImpl.java  
	 *@描述:{todo}    
	 */ 
	public OrderWSImpl() {
		System.out.println("OrderWSImpl()");
	}

	/* (non-Javadoc)
	 * @see www.skiff.cn.webservice.ws.OrderWS#getOrderById(java.lang.Long)
	 */
	@Override
	public Order getOrderById(Long id) {
		System.out.println("web server():");
		return new Order(1L,"无悔",1000000000);
	}

}

/**     
 * @文件名称: OrderWS.java   
 * @描述: TODO  
 * @作者:  一叶扁舟(skiff)
 * @时间:2017年2月23日 上午9:54:52  
 * @版本:V1.0     
 */ 
package www.skiff.cn.webservice.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

import www.skiff.cn.webservice.domain.Order;

/**  
 * @类功能说明:    创建一个SEI(终端服务接口)
 * @作者: 一叶扁舟 (skiff)
 * @创建时间:2017年2月23日 上午9:54:52  
 * @版本:V1.0  
 */
@WebService
public interface IOrderWS {
	
	@WebMethod
	public Order getOrderById(Long id);

}
服务端的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="www.skiff.cn.webservice.ws.impl.OrderWSImpl"
		address="/orderws" >
		<!--配置服务端的入拦截器  -->
	<!-- 	 <jaxws:inInterceptors>
     		<bean class="com.atguigu.day01_ws.interceptor.CheckUserInterceptor"></bean>
     	</jaxws:inInterceptors> --> 
	</jaxws:endpoint>

</beans>

服务端的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 id="WebApp_ID" version="2.5">
  <display-name>webservice_cxf_spring</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 配置beans.xml -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:beans.xml</param-value>
   </context-param>
   
   <!-- 
   		应用启动的一个监听器
    -->
   <listener>
      <listener-class>
         org.springframework.web.context.ContextLoaderListener
      </listener-class>
   </listener>
   
   <!-- 
   		所有请求都会先经过cxf框架
    -->
   <servlet>
      <servlet-name>CXFServlet</servlet-name>
      <servlet-class>
         org.apache.cxf.transport.servlet.CXFServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>CXFServlet</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

服务端结构图:



客户端:

1.生成客户端代码

2.写客户端调用代码

3.配置client-beans.xml



/**     
 * @文件名称: ClientTest.java   
 * @描述: TODO  
 * @作者:  一叶扁舟(skiff)
 * @时间:2017年2月23日 上午11:14:04  
 * @版本:V1.0     
 */ 
package www.skiff.cn.webservice.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import www.skiff.cn.webservice.ws.Order;
import www.skiff.cn.webservice.ws.impl.IOrderWS;

/**  
 * @类功能说明:    
 * @作者: 一叶扁舟 (skiff)
 * @创建时间:2017年2月23日 上午11:14:04  
 * @版本:V1.0  
 */
public class ClientTest {
	public static void main(String[] args) {
		 ClassPathXmlApplicationContext context  = new ClassPathXmlApplicationContext(new String[]{"/client-beans.xml"});
		IOrderWS orderWS =  (IOrderWS) context.getBean("orderClient");
		Order order = orderWS.getOrderById(2L);
		System.out.println("----"+order);
	}

}



package www.skiff.cn.webservice.interceptor;

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;

/**  
 * @类功能说明:    创建一个客户端的拦截器
 * @作者: 一叶扁舟 (skiff)
 * @创建时间:2017年2月23日 上午11:35:41  
 * @版本:V1.0  
 */  
public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

	private String name;
	private String password;
	
	
	
	public AddUserInterceptor(String name,String password) {
		super(Phase.PRE_PROTOCOL);//准备协议化时拦截
		this.name = name;
		this.password = password;
		System.out.println("AddUserInterceptor()....");
	}

	/*
	 	<Envelope>
	 		<head>
	 			<atguigu>
	 				<name>xfzhang</name>
	 				<password>123456</password>
	 			</atguigu>
	 			<atguigu2>
	 				<name>xfzhang</name>
	 				<password>123456</password>
	 			</atguigu2>
	 		<head>
	 		<Body>
	 			<sayHello>
	 				<arg0>BOB</arg0>
	 			<sayHello>
	 		</Body>
	 	</Envelope>
	 */
	@SuppressWarnings("deprecation")
	@Override
	public void handleMessage(SoapMessage msg) throws Fault {
		List<Header> headers = msg.getHeaders();
		
		/*
		 <atguigu>
			<name>xfzhang</name>
			<password>123456</password>
		</atguigu>
		 */
		Document document = DOMHelper.createDocument();
		Element rootEle = document.createElement("atguigu");
		Element nameELe = document.createElement("name");
		nameELe.setTextContent(name);
		rootEle.appendChild(nameELe);
		Element passwordELe = document.createElement("password");
		passwordELe.setTextContent(password);
		rootEle.appendChild(passwordELe);
		
		headers.add(new Header(new QName("atguigu"),rootEle));
		System.out.println("client handleMessage()....");
	}

}

client-beans.xml文件


<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="www.skiff.cn.webservice.ws.impl.IOrderWS"
		address="http://localhost:8080/webservice_cxf_spring/orderws" >
		
		<!--配置客户端的出拦截器  -->
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
			<bean class="www.skiff.cn.webservice.interceptor.AddUserInterceptor">
				<constructor-arg name="name" value="xfzhang"/>
				<constructor-arg name="password" value="123456"/>
			</bean>
		</jaxws:outInterceptors>
		</jaxws:client>
		
		
</beans>

(编辑:李大同)

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

    推荐文章
      热点阅读