`

CXF中的拦截器

 
阅读更多

参考:http://blog.csdn.net/lzwjavaphp/article/details/14224899

 

1.框架自带的拦截器

 

服务器端日志拦截器

package com.hous.test;
import java.util.List;
import javax.xml.ws.Endpoint;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.message.Message;
import com.hous.service.IBook;
import com.hous.service.impl.BookImpl;

public class MyTest {
	public static void main(String[] args) {
		String address = "http://127.0.0.1:10086/Service/book";
		IBook book =  new BookImpl(); 
		Endpoint endpoint = Endpoint.publish(address, book);
		EndpointImpl endpointImpl = (EndpointImpl) endpoint;
		//入拦截器
		List<Interceptor<? extends Message>> inInterceptors = endpointImpl.getInInterceptors();
		inInterceptors.add(new LoggingInInterceptor());
		//出拦截器
		List<Interceptor<? extends Message>> outInterceptors = endpointImpl.getOutInterceptors();
		outInterceptors.add(new LoggingOutInterceptor());
		
		System.out.println("发布成功...");
	}
}

 

客户端日志拦截器

import java.util.List;

import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.message.Message;
import org.apache.cxf.endpoint.Client;

import com.hous.service.impl.BookImplService;
import com.hous.service.impl.IBook;

public class MyClient {
	public static void main(String[] args) {
		BookImplService factory = new BookImplService();
		IBook bookImplPort = factory.getBookImplPort();
		Client client = ClientProxy.getClient(bookImplPort);
		//入拦截器
		List<Interceptor<? extends Message>> inInterceptors = client.getInInterceptors();
		inInterceptors.add(new LoggingInInterceptor());
		//出拦截器
		List<Interceptor<? extends Message>> outInterceptors = client.getOutInterceptors();
		outInterceptors.add(new LoggingOutInterceptor());
		
		System.out.println(bookImplPort.getBookName());
	}
}

 

2.自定义拦截器

服务器端认证拦截器

 

package com.hous.interceptor;
import java.util.List;  
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;  
import org.w3c.dom.NodeList;  
  
public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {  
  
    public AuthInterceptor() {  
        //拦截器在调用方法之前拦截SOAP消息  
        super(Phase.PRE_PROTOCOL);
    }  
      
    /** 
     * @Description: 拦截器操作 
     * @param msg 被拦截到的SOAP消息 
     * @throws Fault 
     */  
    @Override  
    public void handleMessage(SoapMessage msg) throws Fault {  
          
        System.out.println("=====自定义拦截器=======");  
        //获取SOAP消息的Header
        List<Header> headers = msg.getHeaders();  
        //如果没有Header  
        if(headers == null || headers.size() < 1) {  
            throw new Fault(new IllegalArgumentException("没有Header,拦截器实施拦截"));  
        }  
        //获取Header携带是用户和密码信息  
        Header firstHeader = headers.get(0);  
        Element ele = (Element) firstHeader.getObject();  
          
        NodeList userNameEle = ele.getElementsByTagName("userName");  
        NodeList passwordEle = ele.getElementsByTagName("password");  
          
        if (userNameEle.getLength() != 1) {  
            throw new Fault(new IllegalArgumentException("用户名格式不对"));  
        }  
              
        if (passwordEle.getLength() != 1) {  
            throw new Fault(new IllegalArgumentException("用户密码格式不对"));  
        }  
          
        //获取元素的文本内容  
        String userName = userNameEle.item(0).getTextContent();  
        String password = passwordEle.item(0).getTextContent();  
        //错误只能异常抛出
        if (!userName.equals("shanshanbox") || !password.equals("123456")) {  
            throw new Fault(new IllegalArgumentException("用户和密码不正确"));  
        }  
    }  
  
}  

 

客户端认证拦截器

 

package com.hous.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 AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage>{  
      
    private String userName;  
    private String password;  
      
    public AddHeaderInterceptor(String userName, String password) {  
        super(Phase.PREPARE_SEND);  
        this.userName = userName;  
        this.password = password;  
    }  
  
    @Override  
    public void handleMessage(SoapMessage msg) throws Fault {  
          
        List<Header> headers = msg.getHeaders();  
        //创建Document对象  
        Document doc = DOMUtils.createDocument();  
        Element ele = doc.createElement("authHeader");  
        //配置服务器端Head信息的用户密码  
        Element eleId= doc.createElement("userName");  
        eleId.setTextContent(userName);  
        Element elePass = doc.createElement("password");  
        elePass.setTextContent(password);  
          
        ele.appendChild(eleId);  
        ele.appendChild(elePass);  
        /** 
         * 生成的XML文档 
         * <authHeader> 
         *      <userName>shanshanbox</userName> 
         *      <password>123456</password> 
         * </authHeader> 
         */  
        headers.add(new Header(new QName(""), ele));  
    }  
  
}

 别忘了添加到拦截器组中

 

 

分享到:
评论

相关推荐

    webservice的cxf框架拦截器demo

    本篇将深入探讨CXF框架中的拦截器(Interceptor)及其在"webservice的cxf框架拦截器demo"中的应用。 拦截器在CXF中是一种强大的工具,它允许开发者在消息发送或接收的过程中插入自定义的行为。这在处理认证、日志...

    CXF WebService带有拦截器

    在CXF中,拦截器是处理消息生命周期中的关键组件,它们可以在消息发送前、接收后、发送后以及接收前执行自定义逻辑。这使得我们可以在不修改原有业务代码的情况下,轻松地添加额外的功能,如日志记录、安全检查或...

    webservice的cxf框架拦截器demo.rar

    【标题】:“CXF框架在Web服务中的应用:拦截器示例” 【描述】:本压缩包“webservice的cxf框架拦截器demo.rar”提供了一个关于如何在Apache CXF框架下实现Web服务拦截器的实际操作示例。CXF是一个开源的服务框架...

    CXF使用EndpointImpl发布WebService加入拦截器

    在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。在Web服务开发中,拦截器扮演着至关重要的角色,...总的来说,理解并熟练运用CXF拦截器对于任何CXF开发者来说都是一项重要的技能。

    08.CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器

    **CXF拦截器理论与应用** 在Web服务领域,Apache CXF是一个强大的开源框架,它提供了构建和消费SOAP和RESTful服务的能力。拦截器是CXF框架中的一个重要组成部分,允许开发者在服务调用的生命周期中插入自定义逻辑,...

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

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

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

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

    10.为CXF服务器端添加自定义拦截器进行权限检查

    在开发基于CXF的Web服务时,为了确保系统的安全性和数据的完整性,通常需要对请求进行权限检查。本文将深入探讨如何为CXF服务器...在学习和应用这些知识时,结合实际案例和实践操作将有助于更好地掌握CXF拦截器的使用。

    11.为CXF客户端添加自定义拦截器完成权限控制

    在CXF中,拦截器可以插入到消息处理管道中,对请求和响应进行处理。 要为CXF客户端添加自定义拦截器,我们需要遵循以下步骤: 1. **创建拦截器类**:首先,创建一个实现了`org.apache.cxf.interceptor....

    CXF-拦截器-权限控制-登录校验

    本文将深入探讨"CXF拦截器-权限控制-登录校验"这一主题。 首先,我们需要了解什么是拦截器。在CXF框架中,拦截器是实现业务逻辑和基础架构之间解耦的一种方式。它们可以插入到服务调用的生命周期中,在消息发送前或...

    CXF拦截器(Interceptor)的使用

    讲解了cxf实现拦截器的原因、核心API及使用方法

    CXF发布WebService加入拦截器

    CXF拦截器是一种AOP(面向切面编程)的概念,它们是执行特定任务的独立单元,可以在消息传递的生命周期中不同阶段被调用。拦截器可以用来处理如认证、授权、日志记录、性能监控、数据转换等任务,增强了服务的功能和...

    CXF自定义拦截器实现安全机制实例工程

    CXF 自定义拦截器实现的 webservice安全机制实例工程, 带jar包 ,代码注释详细 内有说明文档, 由于资源过大 ,所以客户端jar包 删除掉了, 只需要把服务端的jar 拷贝到 客户端即可 , 小弟刚刚研究完 CXF 安全 。...

    Cxf拦截器实例

    通过学习和理解这些示例,开发者可以更好地利用CXF拦截器来扩展和定制自己的Web服务,提高应用程序的灵活性和可维护性。无论是客户端还是服务器端,拦截器都是一个强大的工具,能够帮助我们控制和优化服务通信的每个...

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

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

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

    5. 自定义拦截器:在CXF中,拦截器用于在消息发送或接收时插入自定义逻辑,例如认证、日志记录等。这里提到的自定义拦截器可能用于实现特定的安全或业务需求。 【描述解析】 "实现了客户端和服务端,客户端添加...

    cxfSecurity.rar cxf加密 加拦截器

    【标题】"cxfSecurity.rar" 是一个与Apache CXF框架相关的压缩文件,它涉及到在Web服务(Webservice)环境中实现安全加密以及使用拦截器(Interceptors)的技术。Apache CXF是一个开源的服务框架,用于构建和开发...

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

    本文主要介绍了如何将Apache CXF与Spring框架整合,以及如何在整合后的系统中添加拦截器来增强服务的功能。通过这样的集成,我们可以利用Spring的管理和AOP特性,同时利用CXF处理Web服务的能力。拦截器的使用则允许...

    WebService之自定义拦截器(server+client)

    拦截器是CXF框架中一个强大的工具,它让开发者能够以一种模块化的方式扩展和优化Web服务功能,提升系统的可维护性和可扩展性。 总之,自定义拦截器是WebService开发中的一个重要概念,它允许我们在服务生命周期的...

    注册自定义拦截器,添加拦截路径和排除拦截路径WebAppConfig

    注册自定义拦截器,添加拦截路径和排除拦截路径WebAppConfig

Global site tag (gtag.js) - Google Analytics