cxf+Spring的webservice应用--拦截器

简介:

接上篇:cxf+Spring的webservice应用



为客户端添加出拦截器:

package com.xh.ws.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.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 MyInterceptor extends AbstractPhaseInterceptor<SoapMessage>{

	private String name;
	private String password;
	
	
	public MyInterceptor() {
		super(Phase.PRE_PROTOCOL);
		System.out.println("client..MyInterceptor()_1......");
	}


	public MyInterceptor(String name,String password) {
		/**
		 * 此處中有 Phase.PRE_PROTOCOL 時才調用  handleMessage(SoapMessage arg0)
		 * 如果是  Phase.PRE_INVOKE 則不調用  handleMessage(SoapMessage arg0)
		 */
		super(Phase.PRE_PROTOCOL);
		this.name=name;
		this.password=password;
		System.out.println("client..MyInterceptor()_2......");
	}
	
	
	@Override
	public void handleMessage(SoapMessage arg0) throws Fault {
		
		/**
		 * 客户端的head
		 * <user>
		 * 		<name>zhangsan</name>
		 * 		<password>zhangsan</password>
		 * </user>
		 * 	
		 */
			List<Header> heads=arg0.getHeaders();
			
			Document document=DOMUtils.createDocument();
			Element rootEle=document.createElement("user");
			Element nameEle=document.createElement("name");
			nameEle.setTextContent(name);
			Element passwordEle=document.createElement("password");
			passwordEle.setTextContent(password);
			rootEle.appendChild(nameEle);
			rootEle.appendChild(passwordEle);
			heads.add(new Header(new QName("user"), rootEle));
			System.out.println("Client:handleMessage().....");
		
		
	}

}

配置拦截器:bean.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="UserClient" serviceClass="com.xh.ws.sei.SayHello" address="http://localhost:8080/ws_spring_s/userProcess">
        <jaxws:outInterceptors>
        	<bean class="com.xh.ws.interceptor.MyInterceptor">
        		<constructor-arg name="name" value="lina"></constructor-arg>
        		<constructor-arg name="password" value="123123"></constructor-arg>
        	</bean>
        </jaxws:outInterceptors>          
                  
                  
</jaxws:client>
</beans>



为服务端添加拦截器:

package com.xh.ws.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;


public class MyInterceptor extends AbstractPhaseInterceptor<SoapMessage>{

	private String name;
	private String password;
	
	public MyInterceptor() {
		super(Phase.PRE_PROTOCOL);
		System.out.println("server..MyInterceptor()......");
	}


	@Override
	public void handleMessage(SoapMessage arg0) throws Fault {
		
		Header header=arg0.getHeader(new QName("user"));
		if(header!=null)
		{
			/**
			 * 解析header
			 */
			Element rootEle=(Element) header.getObject();
			Element name=(Element) rootEle.getElementsByTagName("name").item(0);
			Element password=(Element) rootEle.getElementsByTagName("password").item(0);
			String name_1=name.getTextContent();
			String password_1=password.getTextContent();
			
			if("lina".equals(name_1)&&"123123".equals(password_1))
			{
				return;
			}else
			{
				throw new RuntimeException("用户名或密码不正确!");
			}
			
			
		}
		
	}

}


配置拦截器:bean.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">
   <import resource="classpath:META-INF/cxf/cxf.xml" /> 
   
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 
   <jaxws:endpoint 
     id="UserProcess" 
     implementor="com.xh.ws.sei.SayHelloImpl" 
     address="/userProcess" >
     	<jaxws:inInterceptors>
     		<bean class="com.xh.ws.interceptor.MyInterceptor">
     		
     		</bean>
     	
     	</jaxws:inInterceptors>
     
     
     </jaxws:endpoint>
     
</beans>




目录
相关文章
|
3月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
202 1
|
14天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
228 0
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
133 62
|
1月前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
57 14
|
2月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
248 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
1月前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
79 2
|
2月前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
57 5
|
2月前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
84 8
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
59 1
|
3月前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。