`

使用CXF限制客户端IP地址

    博客分类:
  • SOAP
阅读更多
     有的时候,对于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" />  

分享到:
评论
1 楼 wangxian22 2011-11-03  
能说下具体的实现方法吗,我现在也正在纠结这个问题
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    cxf客户端调用axis服务端流程

    总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...

    开发CXF JAVA客户端

    总之,开发CXF Java客户端涉及的知识点包括CXF框架的使用、Maven配置、WSDL到Java代码的转换、客户端代码编写、配置文件的使用、源码阅读以及工具的运用。通过熟练掌握这些技能,开发者能高效地创建和维护Web服务...

    CXF动态webservice客户端demo

    这个"CXF动态webservice客户端demo"是为了演示如何使用CXF库创建一个动态调用Web服务接口的客户端应用程序。 首先,我们需要了解Web服务的基本概念。Web服务基于SOAP(Simple Object Access Protocol)协议,通过...

    cxf3.1.1客户端需要最少的JAR

    标题 "cxf3.1.1客户端需要最少的JAR" 涉及到的是Apache CXF框架的一个特定版本——3.1.1,用于构建轻量级的客户端应用程序。Apache CXF是一个开源服务框架,它允许开发人员通过SOAP、RESTful、XML/HTTP等多种协议...

    cxf生成客户端 服务端代码

    cxf生成客户端 服务端代码

    CXF客户端支持最少jar

    本文将深入探讨如何配置和使用CXF客户端所需的最少jar包。 首先,让我们了解CXF客户端的核心组件和它们对应的jar包。CXF客户端的核心依赖包括: 1. **cxf-api.jar**:这是CXF的基础API,包含了服务接口和服务实现...

    CXF客户端,自动生成方式

    本篇文章将深入探讨如何使用CXF作为客户端框架,通过MyEclipse集成开发环境自动生成Web服务客户端。 首先,我们要理解CXF的基本概念。CXF,全称“CXF:Confusing eXtensible Framework”,它提供了多种方式来创建...

    webservice cxf 服务端客户端传递参数的例子demo

    - 生成客户端代码:使用CXF的WSDL2Java工具,根据服务的WSDL(Web服务描述语言)生成客户端代码。 - 创建服务代理:实例化生成的客户端类,创建服务代理对象。 - 调用服务:通过代理对象调用服务方法,传递参数并...

    cxf客户端所需jar包-4个

    使用这些JAR文件,开发者可以轻松地创建一个CXF客户端,通过以下步骤: 1. 使用wsdl2java工具生成客户端代码,基于提供的WSDL。 2. 引入必要的CXF库,包括上述四个JAR文件。 3. 实例化服务代理并调用相应的服务方法...

    webservice的cxf框架客户端调用所需jar包

    在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行。这些JAR包包含了CXF框架的核心组件、XML处理库、数据序列化工具、缓存机制、消息队列通信以及Spring框架的支持。 1. `cxf-core...

    Java cxf开发webservice,分别有客户端和服务端

    1.使用Java 2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端(javaweb项目)方法的调用, 实际上就是发送...

    CXF作为客户端调用webService的demo

    用CXF作为客户端调用webService的demo:本人亲测可用,eclipse工程项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。

    cxf3.0.2 客户端完整jar包

    对于仍在使用JDK 1.6的开发者,他们需要寻找适应该版本的CXF客户端jar包。 【标签】"cxf" 标签明确了此资源的核心内容,即Apache CXF。这是一个广泛使用的开源项目,它提供了多种功能,包括SOAP和RESTful Web服务的...

    cxf 开发webservice客户端

    在IT行业中,CXF是一个广泛使用的开源框架,用于开发和实现Web服务,无论是SOAP(简单对象访问协议)还是RESTful风格的服务。本篇文章将详细探讨如何利用CXF框架开发一个Web服务客户端,以及如何进行测试。 一、CXF...

    CXF3.1.11客户端jar包.rar

    "CXF3.1.11客户端jar包.rar"是CXF框架的一个版本3.1.11的客户端组件集合,它包含了一系列必要的jar文件,使得开发者能够快速搭建和使用CXF进行Web服务的开发。 在Web服务开发中,CXF提供了两种主要的客户端API:...

    springboot整合CXF发布webservice和客户端调用

    - 在SpringBoot主类中,使用`@EnableCxfRsServer`开启CXF支持,并配置服务地址。 - 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `...

    CXF客户端调用例子

    CXF客户端调用例子展示了如何使用CXF来创建和消费Web服务。这个例子包含了服务端和客户端两部分,两者都是用Java语言编写的。 在Java中,CXF提供了丰富的API和工具,使得开发者能够方便地实现SOAP(Simple Object ...

    WebService开发客户端 cxf方式

    本篇文章将详细探讨如何使用CXF框架来开发WebService客户端。 一、CXF简介 CXF是一个开源的Java框架,它支持构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)Web服务。CXF提供了...

    CXF 一个完整的webService(整合客户端和服务端)

    - 测试:使用CXF的内置测试框架,可以对服务端和客户端进行单元测试和集成测试。 - 日志和调试:CXF支持日志记录和调试工具,帮助开发者定位问题。 **5. RESTful服务与CXF** 除了传统的SOAP服务,CXF也支持RESTful...

    Java webservice cxf客户端调用demo和服务端

    3. 配置服务:使用CXF提供的注解(如`@WebService`)标记接口和实现类,指定服务的元数据,如服务名、端点地址等。 4. 发布服务:通过CXF的Server类实例化并启动服务,使其可供客户端调用。 **客户端调用:** 1. ...

Global site tag (gtag.js) - Google Analytics