参考: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)); } }
别忘了添加到拦截器组中
相关推荐
在深入探讨CXF拦截器的使用之前,我们首先需要理解其在CXF框架中的核心作用与价值。Apache CXF是一个开源框架,用于构建和消费基于SOAP和REST标准的Web服务。其设计的核心目标之一便是灵活性和可扩展性,这在很大...
本篇将深入探讨CXF框架中的拦截器(Interceptor)及其在"webservice的cxf框架拦截器demo"中的应用。 拦截器在CXF中是一种强大的工具,它允许开发者在消息发送或接收的过程中插入自定义的行为。这在处理认证、日志...
在CXF中,拦截器是处理消息生命周期中的关键组件,它们可以在消息发送前、接收后、发送后以及接收前执行自定义逻辑。这使得我们可以在不修改原有业务代码的情况下,轻松地添加额外的功能,如日志记录、安全检查或...
1. **CXF拦截器基础**:CXF的拦截器是基于JAX-WS规范的Handler Chain模型,分为In-bound(请求进来时触发)和Out-bound(响应出去时触发)两类。拦截器可以通过在服务配置中指定,或者通过编程方式动态添加。 2. **...
在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。在Web服务开发中,拦截器扮演着至关重要的角色,...总的来说,理解并熟练运用CXF拦截器对于任何CXF开发者来说都是一项重要的技能。
【标题】:“CXF框架在Web服务中的应用:拦截器示例” 【描述】:本压缩包“webservice的cxf框架拦截器demo.rar”提供了一个关于如何在Apache CXF框架下实现Web服务拦截器的实际操作示例。CXF是一个开源的服务框架...
**CXF拦截器理论与应用** 在Web服务领域,Apache CXF是一个强大的开源框架,它提供了构建和消费SOAP和RESTful服务的能力。拦截器是CXF框架中的一个重要组成部分,允许开发者在服务调用的生命周期中插入自定义逻辑,...
在本项目中,"spring集成cxf客户端和服务器端demo(含自定义拦截器)"是一个实战案例,展示了如何在Spring框架下与Apache CXF服务进行整合,实现客户端和服务端的交互,并利用拦截器来增强功能。以下是这个项目涉及的...
在CXF中,拦截器可以插入到消息处理管道中,对请求和响应进行处理。 要为CXF客户端添加自定义拦截器,我们需要遵循以下步骤: 1. **创建拦截器类**:首先,创建一个实现了`org.apache.cxf.interceptor....
本文将深入探讨"CXF拦截器-权限控制-登录校验"这一主题。 首先,我们需要了解什么是拦截器。在CXF框架中,拦截器是实现业务逻辑和基础架构之间解耦的一种方式。它们可以插入到服务调用的生命周期中,在消息发送前或...
CXF拦截器是一种AOP(面向切面编程)的概念,它们是执行特定任务的独立单元,可以在消息传递的生命周期中不同阶段被调用。拦截器可以用来处理如认证、授权、日志记录、性能监控、数据转换等任务,增强了服务的功能和...
CXF 自定义拦截器实现的 webservice安全机制实例工程, 带jar包 ,代码注释详细 内有说明文档, 由于资源过大 ,所以客户端jar包 删除掉了, 只需要把服务端的jar 拷贝到 客户端即可 , 小弟刚刚研究完 CXF 安全 。...
通过学习和理解这些示例,开发者可以更好地利用CXF拦截器来扩展和定制自己的Web服务,提高应用程序的灵活性和可维护性。无论是客户端还是服务器端,拦截器都是一个强大的工具,能够帮助我们控制和优化服务通信的每个...
在开发基于CXF的Web服务时,为了确保系统的安全性和数据的完整性,通常需要对请求进行权限检查。本文将深入探讨如何为CXF服务器...在学习和应用这些知识时,结合实际案例和实践操作将有助于更好地掌握CXF拦截器的使用。
在Spring框架中,我们可以使用Spring的`@Bean`注解来配置CXF拦截器。首先,我们需要创建一个实现了`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.PhaseInterceptor`接口的类。这个类通常会包含处理...
5. 自定义拦截器:在CXF中,拦截器用于在消息发送或接收时插入自定义逻辑,例如认证、日志记录等。这里提到的自定义拦截器可能用于实现特定的安全或业务需求。 【描述解析】 "实现了客户端和服务端,客户端添加...
【标题】"cxfSecurity.rar" 是一个与Apache CXF框架相关的压缩文件,它涉及到在Web服务(Webservice)环境中实现安全加密以及使用拦截器(Interceptors)的技术。Apache CXF是一个开源的服务框架,用于构建和开发...
本文主要介绍了如何将Apache CXF与Spring框架整合,以及如何在整合后的系统中添加拦截器来增强服务的功能。通过这样的集成,我们可以利用Spring的管理和AOP特性,同时利用CXF处理Web服务的能力。拦截器的使用则允许...
拦截器是CXF框架中一个强大的工具,它让开发者能够以一种模块化的方式扩展和优化Web服务功能,提升系统的可维护性和可扩展性。 总之,自定义拦截器是WebService开发中的一个重要概念,它允许我们在服务生命周期的...
IP拦截器的主要任务是检查请求的源IP地址,如果该地址存在于黑名单中,拦截器会阻止其访问;相反,如果IP地址在白名单中,允许其通过。这个Java示例可能包含了一个用于处理这种逻辑的类或者模块。 描述中提到的...