- 浏览: 189781 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. CXF添加拦截器
2. CXF添加自定义拦截器
webservice分服务端和客户端,服务端和客户端都是可以加拦截器的,无论是服务端还是客户端,都分进,出(In,Out)拦截器; Server.java package com.andrew.server; import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import com.andrew.webservice.HelloWorld; import com.andrew.webservice.impl.HelloWorldImpl; public class Server { public static void main(String[] args) { System.out.println("web service start"); HelloWorld implementor = new HelloWorldImpl(); String address = "http://192.168.18.2/helloWorld"; // 1. 使用JDK实现 // Endpoint.publish(address, implementor); // 2. 使用CXF实现 JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean(); factoryBean.setAddress(address); // 设置暴露地址 factoryBean.setServiceClass(HelloWorld.class); // 接口类 factoryBean.setServiceBean(implementor); // 设置实现类 factoryBean.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器 factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 factoryBean.create(); System.out.println("web service started"); } } Inbound进信息,Outbound是出信息
pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.andrew.webservice</groupId> <artifactId>WS_Client</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.5</version> </dependency> </dependencies> </project> Client.java package com.andrew.client; import java.util.List; import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import com.andrew.webservice.HelloWorld; import com.andrew.webservice.HelloWorldService; import com.andrew.webservice.MyRole; import com.andrew.webservice.MyRoleArray; import com.andrew.webservice.Role; import com.andrew.webservice.User; public class Client { public static void main(String[] args) { HelloWorldService service = new HelloWorldService(); HelloWorld helloWorld = service.getHelloWorldPort(); org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloWorld); client.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器 client.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 System.out.println(helloWorld.say("andrew")); User user = new User(); user.setUserName("tony"); user.setPassword("123456"); List<Role> roleList = helloWorld.getRoleByUser(user); for (Role role : roleList) { System.out.println(role.getId() + "," + role.getRoleName()); } MyRoleArray array = helloWorld.getRoles(); List<MyRole> roleList2 = array.getItem(); for(int i = 0; i < roleList2.size(); i++){ MyRole my = roleList2.get(i); System.out.print(my.getKey() + ":"); for(Role r : my.getValue()){ System.out.print(r.getId() + "," + r.getRoleName() + " "); } System.out.println(); } } } Inbound进信息,Outbound是出信息
2. CXF添加自定义拦截器
MyInterceptor.java package com.andrew.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 MyInterceptor extends AbstractPhaseInterceptor<SoapMessage>{ public MyInterceptor() { super(Phase.PRE_INVOKE); } public void handleMessage(SoapMessage message) throws Fault { List<Header> headers = message.getHeaders(); if (headers == null || headers.size() == 0) { throw new Fault(new IllegalArgumentException("没有Header,拦截器实施拦截")); } Header firstHeader = headers.get(0); Element ele = (Element) firstHeader.getObject(); NodeList userIds = ele.getElementsByTagName("userName"); NodeList userPasses = ele.getElementsByTagName("password"); if (userIds.getLength() != 1) { throw new Fault(new IllegalArgumentException("用户名格式不对")); } if (userPasses.getLength() != 1) { throw new Fault(new IllegalArgumentException("密码格式不对")); } String userId = userIds.item(0).getTextContent(); String userPass = userPasses.item(0).getTextContent(); if (!userId.equals("tony") || ! userPass.equals("123456")) { throw new Fault(new IllegalArgumentException("用户名或者密码不正确")); } } } Server.java package com.andrew.server; import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import com.andrew.interceptor.MyInterceptor; import com.andrew.webservice.HelloWorld; import com.andrew.webservice.impl.HelloWorldImpl; public class Server { public static void main(String[] args) { System.out.println("web service start"); HelloWorld implementor = new HelloWorldImpl(); String address = "http://192.168.18.2/helloWorld"; // 1. 使用JDK实现 // Endpoint.publish(address, implementor); // 2. 使用CXF实现 JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean(); factoryBean.setAddress(address); // 设置暴露地址 factoryBean.setServiceClass(HelloWorld.class); // 接口类 factoryBean.setServiceBean(implementor); // 设置实现类 factoryBean.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器 factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 factoryBean.getInInterceptors().add(new MyInterceptor()); // 添加自定义拦截器 factoryBean.create(); System.out.println("web service started"); } }
1) cmd 2) cd E:\studyWEBSERVICECXF\WS_Client\src\main\java 3) wsdl2java http://192.168.18.2/helloWorld?wsdl
AddHeaderInterceptor.java package com.andrew.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); // 发送SOAP消息之前调用拦截器 this.userName = userName; this.password = password; } public void handleMessage(SoapMessage message) throws Fault { List<Header> headers=message.getHeaders(); Document doc=DOMUtils.createDocument(); Element ele=doc.createElement("authHeader"); Element idElement=doc.createElement("userName"); idElement.setTextContent(userName); Element passElement=doc.createElement("password"); passElement.setTextContent(password); ele.appendChild(idElement); ele.appendChild(passElement); headers.add(new Header(new QName("tony"),ele)); } } Client.java package com.andrew.client; import java.util.List; import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import com.andrew.interceptor.AddHeaderInterceptor; import com.andrew.webservice.HelloWorld; import com.andrew.webservice.HelloWorldService; import com.andrew.webservice.MyRole; import com.andrew.webservice.MyRoleArray; import com.andrew.webservice.Role; import com.andrew.webservice.User; public class Client { public static void main(String[] args) { HelloWorldService service = new HelloWorldService(); HelloWorld helloWorld = service.getHelloWorldPort(); org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloWorld); // client.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器 client.getOutInterceptors().add(new AddHeaderInterceptor("tony","123456")); // 添加自定义拦截器 client.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 System.out.println(helloWorld.say("andrew")); User user = new User(); user.setUserName("tony"); user.setPassword("123456"); List<Role> roleList = helloWorld.getRoleByUser(user); for (Role role : roleList) { System.out.println(role.getId() + "," + role.getRoleName()); } MyRoleArray array = helloWorld.getRoles(); List<MyRole> roleList2 = array.getItem(); for(int i = 0; i < roleList2.size(); i++){ MyRole my = roleList2.get(i); System.out.print(my.getKey() + ":"); for(Role r : my.getValue()){ System.out.print(r.getId() + "," + r.getRoleName() + " "); } System.out.println(); } } } 如果密码改成123则报错
相关推荐
1. **CXF拦截器基础**:CXF的拦截器是基于JAX-WS规范的Handler Chain模型,分为In-bound(请求进来时触发)和Out-bound(响应出去时触发)两类。拦截器可以通过在服务配置中指定,或者通过编程方式动态添加。 2. **...
在开发基于CXF的Web服务时,为了确保系统的安全性和数据的完整性,通常需要对请求进行权限检查。本文将深入探讨如何为CXF服务器...在学习和应用这些知识时,结合实际案例和实践操作将有助于更好地掌握CXF拦截器的使用。
通过上述分析,我们可以看出CXF拦截器机制的深度和广度。它不仅提供了强大的功能扩展能力,还通过精心设计的API保证了系统的灵活性、可维护性和性能。对于希望利用CXF构建高度定制化Web服务的开发者而言,深入理解和...
拦截器分为两种类型:客户端拦截器和服务器端拦截器,分别处理客户端和服务端的请求和响应。 ### 二、拦截器的生命周期 CXF拦截器的生命周期与消息处理紧密相关,主要包含以下阶段: 1. **Pre-Dispatch(预调度)...
在本项目中,"spring集成cxf客户端和服务器端demo(含自定义拦截器)"是一个实战案例,展示了如何在Spring框架下与Apache CXF服务进行整合,实现客户端和服务端的交互,并利用拦截器来增强功能。以下是这个项目涉及的...
CXF是一个流行的开源框架,它支持SOAP和RESTful两种Web Service风格,并提供了丰富的功能,包括安全、拦截器等。本节我们将深入探讨如何为CXF客户端添加自定义拦截器以实现权限控制。 首先,理解拦截器的概念是至关...
这里少了一个类,是根据实体类生成xml的文件下载地址为:http://download.csdn.net/detail/qq_14996421/9495688
通过学习和理解这些示例,开发者可以更好地利用CXF拦截器来扩展和定制自己的Web服务,提高应用程序的灵活性和可维护性。无论是客户端还是服务器端,拦截器都是一个强大的工具,能够帮助我们控制和优化服务通信的每个...
在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。在Web服务开发中,拦截器扮演着至关重要的角色,...总的来说,理解并熟练运用CXF拦截器对于任何CXF开发者来说都是一项重要的技能。
在CXF中,拦截器是处理消息生命周期中的关键组件,它们可以在消息发送前、接收后、发送后以及接收前执行自定义逻辑。这使得我们可以在不修改原有业务代码的情况下,轻松地添加额外的功能,如日志记录、安全检查或...
CXF+Spring+自定义拦截器 webservice源码下载
在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。当我们谈论"CXF发布WebService加入拦截器...通过阅读和分析给定的压缩包文件,你可以学习到更多关于CXF拦截器的具体实现和用法。
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而WebService之自定义拦截器的实现,无论是对于服务器端还是客户端,都是为了增强服务的功能性和安全性。本文将深入探讨自定义拦截器的概念、作用以及...
在实际应用中,除了自定义拦截器,还可以利用CXF提供的内置拦截器,如LoggingInInterceptor和LoggingOutInterceptor,用于日志记录,或者AddressingInInterceptor和AddressingOutInterceptor,用于处理WS-Addressing...
【标题解析】 ...这个项目提供了从设计、实现到测试Web服务的完整示例,对于学习和理解CXF、Spring、MyBatis和Maven的集成,以及如何在Web服务中实现自定义拦截器和安全验证机制,具有很高的参考价值。
在CXF服务端,你可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.PhaseInterceptorChain`接口的类来创建自定义拦截器,并将它们添加到服务的拦截器链中。 4. **“inter_client”**: 这...
CXF 自定义拦截器实现的 webservice安全机制实例工程, 带jar包 ,代码注释详细 内有说明文档, 由于资源过大 ,所以客户端jar包 删除掉了, 只需要把服务端的jar 拷贝到 客户端即可 , 小弟刚刚研究完 CXF 安全 。...
本文将深入探讨"CXF拦截器-权限控制-登录校验"这一主题。 首先,我们需要了解什么是拦截器。在CXF框架中,拦截器是实现业务逻辑和基础架构之间解耦的一种方式。它们可以插入到服务调用的生命周期中,在消息发送前或...
首先,我们需要理解CXF拦截器的概念。拦截器是CXF提供的一种机制,它允许我们在Web服务调用的生命周期中的不同阶段插入自定义逻辑,如消息的发送和接收。这为我们提供了在服务执行前、后或过程中进行额外操作的机会...
标签中的“IP拦截器”、“IP黑名单”和“IP白名单”是核心概念,它们代表了网络安全策略的不同方面。IP拦截器是实现这一策略的工具,黑名单用于阻止特定IP的访问,而白名单则是允许指定IP的访问。在实际应用中,通常...