有的时候,对于WebService服务端,想配置白名单和黑名单的IP地址,允许白名单的IP地址请求,阻止黑名单的IP地址请求。
在CXF中,可以通过一个输入拦截器实现。
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
/**
* IP地址拦截器
* 可在filter.xml文件中配置允许和拒绝访问的IP地址
* @author Sunshine
*
*/
public class IpAddressInInterceptor extends AbstractPhaseInterceptor<Message> {
public IpAddressInInterceptor() {
super(Phase.RECEIVE);
}
public void handleMessage(Message message) throws Fault {
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
// 通过一个IpAddressConfig对象,从XML文件中读取预先设置的允许和拒绝的IP地址,这些值也可以来自数据库
IpAddressConfig config = IpAddressConfig.getInstance(); // 获取config实例
List<String> allowedList = config.getAllowedList(); // 允许访问的IP地址
List<String> deniedList = config.getDeniedList(); // 拒绝访问的IP地址
String ipAddress = request.getRemoteAddr(); // 取客户端IP地址
// 先处理拒绝访问的地址
for (String deniedIpAddress : deniedList) {
if (deniedIpAddress.equals(ipAddress)) {
throw new Fault(new IllegalAccessException("IP address " + ipAddress + " is denied"));
}
}
// 如果允许访问的集合非空,继续处理,否则认为全部IP地址均合法
if (allowedList.size() > 0) {
boolean contains = false;
for (String allowedIpAddress : allowedList) {
if (allowedIpAddress.equals(ipAddress)) {
contains = true;
break;
}
}
if (!contains) {
throw new Fault(new IllegalAccessException("IP address " + ipAddress + " is not allowed"));
}
}
}
}
我的IP地址允许和阻止列表来自一个自定义的filter.xml文件,这个值也可以来自数据库。当显式抛出Fault异常的时候,这个请求即被阻止,否则放行。
在applicationContext-cxf.xml中要相应的定义这个IP地址拦截器,使之生效。
<!-- IP地址输入拦截器 -->
<bean id="ipAddressInInterceptor"
class="com.yourcompany.ws.interceptor.IpAddressInInterceptor" />
<!-- 用户名和密码输入拦截器 -->
<bean id="wss4jInInterceptor"
class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<property name="properties">
<map>
<entry key="action" value="UsernameToken Timestamp" />
<entry key="passwordType" value="PasswordDigest" />
<entry key="passwordCallbackRef"
value-ref="digestPasswordCallback" />
</map>
</property>
</bean>
<!-- 密码回调 -->
<bean id="digestPasswordCallback"
class="com.yourcompany.ws.handler.DigestPasswordCallback" />
<!-- 全局Bus(输入拦截器) -->
<cxf:bus>
<cxf:inInterceptors>
<ref bean="ipAddressInInterceptor" />
<ref bean="wss4jInInterceptor" />
</cxf:inInterceptors>
</cxf:bus>
<!-- WebService服务 -->
<jaxws:endpoint id="helloWorldServiceEP" address="/HelloWorldService">
<jaxws:implementor ref="helloWorldService" />
</jaxws:endpoint>
<bean id="helloWorldService"
class="com.yourcompany.ws.impl.HelloWorldServiceImpl" />
分享到:
相关推荐
总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...
总之,开发CXF Java客户端涉及的知识点包括CXF框架的使用、Maven配置、WSDL到Java代码的转换、客户端代码编写、配置文件的使用、源码阅读以及工具的运用。通过熟练掌握这些技能,开发者能高效地创建和维护Web服务...
这个"CXF动态webservice客户端demo"是为了演示如何使用CXF库创建一个动态调用Web服务接口的客户端应用程序。 首先,我们需要了解Web服务的基本概念。Web服务基于SOAP(Simple Object Access Protocol)协议,通过...
标题 "cxf3.1.1客户端需要最少的JAR" 涉及到的是Apache CXF框架的一个特定版本——3.1.1,用于构建轻量级的客户端应用程序。Apache CXF是一个开源服务框架,它允许开发人员通过SOAP、RESTful、XML/HTTP等多种协议...
cxf生成客户端 服务端代码
本文将深入探讨如何配置和使用CXF客户端所需的最少jar包。 首先,让我们了解CXF客户端的核心组件和它们对应的jar包。CXF客户端的核心依赖包括: 1. **cxf-api.jar**:这是CXF的基础API,包含了服务接口和服务实现...
本篇文章将深入探讨如何使用CXF作为客户端框架,通过MyEclipse集成开发环境自动生成Web服务客户端。 首先,我们要理解CXF的基本概念。CXF,全称“CXF:Confusing eXtensible Framework”,它提供了多种方式来创建...
- 生成客户端代码:使用CXF的WSDL2Java工具,根据服务的WSDL(Web服务描述语言)生成客户端代码。 - 创建服务代理:实例化生成的客户端类,创建服务代理对象。 - 调用服务:通过代理对象调用服务方法,传递参数并...
使用这些JAR文件,开发者可以轻松地创建一个CXF客户端,通过以下步骤: 1. 使用wsdl2java工具生成客户端代码,基于提供的WSDL。 2. 引入必要的CXF库,包括上述四个JAR文件。 3. 实例化服务代理并调用相应的服务方法...
在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行。这些JAR包包含了CXF框架的核心组件、XML处理库、数据序列化工具、缓存机制、消息队列通信以及Spring框架的支持。 1. `cxf-core...
1.使用Java 2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送...
用CXF作为客户端调用webService的demo:本人亲测可用,eclipse工程项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。
对于仍在使用JDK 1.6的开发者,他们需要寻找适应该版本的CXF客户端jar包。 【标签】"cxf" 标签明确了此资源的核心内容,即Apache CXF。这是一个广泛使用的开源项目,它提供了多种功能,包括SOAP和RESTful Web服务的...
在IT行业中,CXF是一个广泛使用的开源框架,用于开发和实现Web服务,无论是SOAP(简单对象访问协议)还是RESTful风格的服务。本篇文章将详细探讨如何利用CXF框架开发一个Web服务客户端,以及如何进行测试。 一、CXF...
"CXF3.1.11客户端jar包.rar"是CXF框架的一个版本3.1.11的客户端组件集合,它包含了一系列必要的jar文件,使得开发者能够快速搭建和使用CXF进行Web服务的开发。 在Web服务开发中,CXF提供了两种主要的客户端API:...
- 在SpringBoot主类中,使用`@EnableCxfRsServer`开启CXF支持,并配置服务地址。 - 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `...
CXF客户端调用例子展示了如何使用CXF来创建和消费Web服务。这个例子包含了服务端和客户端两部分,两者都是用Java语言编写的。 在Java中,CXF提供了丰富的API和工具,使得开发者能够方便地实现SOAP(Simple Object ...
本篇文章将详细探讨如何使用CXF框架来开发WebService客户端。 一、CXF简介 CXF是一个开源的Java框架,它支持构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)Web服务。CXF提供了...
- 测试:使用CXF的内置测试框架,可以对服务端和客户端进行单元测试和集成测试。 - 日志和调试:CXF支持日志记录和调试工具,帮助开发者定位问题。 **5. RESTful服务与CXF** 除了传统的SOAP服务,CXF也支持RESTful...
3. 配置服务:使用CXF提供的注解(如`@WebService`)标记接口和实现类,指定服务的元数据,如服务名、端点地址等。 4. 发布服务:通过CXF的Server类实例化并启动服务,使其可供客户端调用。 **客户端调用:** 1. ...