`

CXF 添加拦截器+整合Spring

    博客分类:
  • cxf
 
阅读更多

1.自定义拦截器

package com.cxf.interceptor;

import java.util.List;
import javax.xml.soap.SOAPException;
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.log4j.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

//AbstractPhaseInterceptor可以指定拦截器在那个阶段起作用
public class UserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

	Logger logger=Logger.getLogger(UserInterceptor.class);
	
	//显示调用父类的有参数的构造器就不会在隐示调用父类无参构造器
	public UserInterceptor() {
		super(Phase.PRE_INVOKE);//在调用之前拦截soap消息
	}

	@Override//message就是被拦截到的消息
	public void handleMessage(SoapMessage msg) throws Fault {
		//获取所有的头元素
		List<Header> headers=msg.getHeaders();
		if(headers==null || headers.size()==0){
			throw new Fault(new SOAPException("缺少Head 元素"));
		}
		//获取第一个头元素(w3c.dom.Element)
		Header firstHead= headers.get(0);
		Element element= (Element) firstHead.getObject();
		
		NodeList nameList= element.getElementsByTagName("userName");
		NodeList passWordList= element.getElementsByTagName("passWord");
		
		if(nameList.getLength()!=1 || passWordList.getLength()!=1){
			throw new Fault(new SOAPException("用户名密码格式有问题"));
		}
		
//		获取用户名密码
		String userName=nameList.item(0).getTextContent();
		String passWord=passWordList.item(0).getTextContent();
		
		logger.info(userName+":"+passWord);
		
		if(! userName.equals("rain") ||  ! passWord.equals("rain"))
			throw new Fault(new IllegalArgumentException("用户名密错误"));
		
		
	}

}

 

2.Web.Xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name></display-name>

<!-- Spring配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/config/context/*.xml</param-value>
	</context-param>
<!-- Spring监听 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

<!-- CXFServlet 的访问地址-->
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/WebService/*</url-pattern>
	</servlet-mapping>


	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

3.Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:jaxws="http://cxf.apache.org/jaxws" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.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-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<!-- Service -->
	<bean id="UserServiceImpl" class="com.cxf.service.impl.UserServiceImp"></bean>
<!-- WebService -->
	<bean id="UserServiceWs" class="com.cxf.ws.impl.UserServiceWs">
		<property name="userService" ref="UserServiceImpl"></property>
	</bean>
<!-- 	拦截器 -->
	<bean id="userInterceptor" class="com.cxf.interceptor.UserInterceptor"/>

<!-- 发布的地址,实现的接口,实现类 ,拦截器-->
	
	<jaxws:server id="userManager" address="/userManager" serviceClass="com.cxf.ws.IUserServiceWs" >
		<jaxws:serviceBean>
			<ref bean="UserServiceWs"/>
		</jaxws:serviceBean>
		<jaxws:inInterceptors>
 			<ref bean="userInterceptor"/>
 		</jaxws:inInterceptors>
	</jaxws:server>
	
</beans>

 

分享到:
评论

相关推荐

    CXF2.1.3+spring3.0+struts2.3.4

    Struts2.3.4版本包含了一些关键改进,如增强了拦截器的灵活性,提供了更多的插件支持,以及对最新Java和Web技术的兼容性。Struts2可以与CXF结合,通过Action跳转到不同的服务接口,从而提供动态的服务调用能力。 ...

    CXF3.0+Spring3.2 自定义拦截器

    1. **CXF拦截器基础**:CXF的拦截器是基于JAX-WS规范的Handler Chain模型,分为In-bound(请求进来时触发)和Out-bound(响应出去时触发)两类。拦截器可以通过在服务配置中指定,或者通过编程方式动态添加。 2. **...

    cxf webservice+spring+mybatis 整合(含Jar包)

    在IT行业中,构建一个高效且灵活的企业级应用是至关重要的,而"CXF Webservice+Spring+MyBatis 整合"就是一个这样的解决方案。这个整合利用了三个强大的开源框架:Apache CXF、Spring以及MyBatis,来实现Web服务、...

    cxf+spring整合

    - 配置CXF拦截器和处理器:Spring可以用来管理CXF的拦截器和消息处理器,使它们能够作为Spring beans进行注入和管理。 ```xml ``` 4. **运行环境:MyEclipse** MyEclipse是一款集成开发环境,特别...

    13.为CXF与Spring整合发布WebService添加拦截器进行权限控制

    在Spring框架中,我们可以使用Spring的`@Bean`注解来配置CXF拦截器。首先,我们需要创建一个实现了`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.PhaseInterceptor`接口的类。这个类通常会包含处理...

    CXF和Spring整合,并且添加拦截器

    **标题:“CXF和Spring整合,并且添加拦截器”** 在Java世界中,Apache CXF是一个流行的开源服务框架,用于创建和消费Web服务。它支持多种Web服务规范,包括SOAP、RESTful API以及WS-*标准。另一方面,Spring框架是...

    CXF3.1.16 +Spring4 +MyBatis + Maven自定义拦截器 WebService实例源码下载

    "CXF3.1.16 +Spring4 +MyBatis + Maven自定义拦截器 WebService实例源码下载" 这个标题揭示了该项目的核心技术栈,包括: 1. CXF 3.1.16:这是一个开源的服务框架,用于构建和开发服务,支持SOAP和RESTful Web服务...

    spring集成cxf客户端和服务器端demo(含自定义拦截器)

    在本项目中,"spring集成cxf客户端和服务器端demo(含自定义拦截器)"是一个实战案例,展示了如何在Spring框架下与Apache CXF服务进行整合,实现客户端和服务端的交互,并利用拦截器来增强功能。以下是这个项目涉及的...

    CXF2.6+SPRING3.0+STRUTS2.3例子含Jar包

    **Struts2** 是一个基于MVC设计模式的Java Web框架,Struts2.3 提供了强大的动作映射、拦截器和结果类型等特性,简化了Web应用的开发。它与Spring的结合使得可以利用Spring的依赖注入来管理Struts2中的Action和业务...

    webservice+cxf+wss4j+spring

    4. **添加WSS4J安全配置**:使用WSS4J的拦截器,配置所需的WS-Security功能,如用户名令牌验证、X.509证书验证或SAML令牌等。 5. **客户端调用**:创建CXF的Web服务客户端,可以使用`JaxWsProxyFactoryBean`生成...

    CXF Webservice(二) 整合spring

    此外,我们还可以使用Spring的AOP功能为Web服务添加拦截器或过滤器,以实现如日志记录、安全控制等功能。只需在Spring配置中定义这些拦截器,并通过`&lt;jaxws:endpoint&gt;`或`&lt;jaxrs:server&gt;`的`inInterceptors`和`...

    Spring整合CXF发布服务

    在整合Spring和CXF之前,我们需要确保环境配置正确。这包括安装Java JDK、Apache CXF库和Spring框架。Spring可以通过Maven或Gradle引入依赖,而CXF同样可以在构建工具中配置相关依赖。 2. **创建CXF服务接口** ...

    springMVC3+apache CXF+spring security3+mybatis3(proxool)整合maven项目

    在实际开发中,这些组件的集成涉及到大量的配置工作,例如Spring MVC的拦截器配置、CXF的WS-Security设置、Spring Security的角色权限配置、MyBatis的Mapper配置以及Proxool的连接池参数设定等。通过这个项目,...

    Struts2+Spring3+Hibernate4+Maven+EasyUI+CXF 整合

    它提供了强大的拦截器机制,可以灵活地扩展功能,如验证、异常处理等。Struts2与Spring的整合,使得Action可以直接注入Spring管理的bean,提高了代码的可维护性。 2. **Spring3**:Spring是Java企业级应用的核心...

    spring整合cxf

    - **异常处理和拦截器**:Spring和CXF的结合使得我们可以使用Spring的AOP来处理服务调用中的异常,或者定义自定义的拦截器来增强服务的功能,如日志记录、性能监控等。 - **测试支持**:Spring的测试框架如`...

    CXF与Spring 2.5整合

    4. **Spring的AOP集成**:结合Spring的AOP,我们可以为CXF的服务添加拦截器或过滤器,实现事务管理、日志记录、安全性检查等功能,增强了服务的灵活性和安全性。 5. **CXF的Bus对象**:CXF的Bus对象是整个框架的...

    CXF+Spring 完整版例子

    5. **拦截器和行为**:CXF允许使用拦截器和行为来扩展其功能,例如日志记录、安全检查、性能监控等。这些可以在Spring配置中声明并注入到CXF的服务上下文中。 6. **Spring AOP集成**:通过Spring的AOP(面向切面...

    springBoot完整整合WebService框架CXF示例

    5. **CXF拦截器**:CXF拦截器是处理消息传递过程中的钩子,可以在消息发送前、发送后、接收前、接收后等阶段进行操作。在这个示例中,拦截器用于实现简单的授权校验。你可以定义一个实现了`ClientInterceptor`或`...

    cxf + spring 例子

    7. **异常处理与安全控制**:在Spring配置中,可以添加拦截器来处理服务异常,或者实现安全策略,如添加认证和授权机制,确保服务的安全性。 8. **监控与日志**:CXF集成了日志框架,可以方便地记录服务调用信息。...

Global site tag (gtag.js) - Google Analytics