web service访问控制和过滤器(axis)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

使用axis的Handler进行访问控制

axis为Web服务的访问控制提供了相关的配置描述符,并且提供了一个访问控制的简单Handler(关于Handler的详细介绍见" J2EE Web服务开发系列之六: 使用Handler来增强Web服务的功能")。默认情况下,你只要在配置描述符中添加用户,然后在Web服务器的部署描述符中自动允许的角色即可。

首先在axis的配置文件users.lst(位于WEB-INF目录下)中添加一个用户,如"axisuser pass",表示用户名为axisuser,密码为pass。然后把案例的Web服务重新部署,在server-config.wsdd中添加例程7所示的部署代码。


例程7 重新部署PersonalTaxService

  <service name="PersonalTaxService2" provider="java:RPC">
  <parameter name="allowedMethods" value="*"/>
    <parameter name="className" value="com.hellking.study.webservice.PersonalTaxService"/>
      <parameter name="allowedRoles" value="axisuser"/>
    <requestFlow>
    <handler name="authen"
 type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
    </requestFlow>
  </service>
  


在这个部署描述符中,指定PersonalTaxService2服务只能被axisuser访问,要想使访问控制生效,还必须把SimpleAuthenticationHandler添加到请求Handler链中。

你只要修改AuthClient代码的服务端点URL和访问用户名、密码,就可以测试新的Web服务了,如例程8所示。


例程8 HandlerAuthClient

public class HandlerAuthClient
{
。。。 
String endpointURL = "http://localhost:8080/axis/services/PersonalTaxService2?wsdl";
      。。。
   call.getMessageContext().setUsername("axisuser");//axis中的用户名。
   call.getMessageContext().setPassword("pass");//密码
。。。
 


执行HandlerAuthClient,能够顺利访问Web服务;如果修改用户名或者密码,那么就不能访问,这说明Axis的Handler对Web服务的访问权限进行了有效的控制。

使用Servlet过滤器(Filter)进行访问控制 Axis的Web服务端本质上是以Servlet方式在运行,所有我们完全可以在Web应用上部署一个Servlet过滤器,通过此过滤器来达到访问控制的效果。

Web应用中的过滤器截取从客户端进来的请求,然后进行一系列处理,最后把请求发送到目标Servlet。过滤器的工作原理如下图所示。


图1 过滤器工作原理
 

过滤器可以说是外部进入Web服务器的第一道关,它能决定请求是否继续向前转发,也能对请求中的信息进行处理。如果过滤器用于对Web服务进行访问控制,那么它能根据客户端信息决定目标的服务是否能调用成功。

将要开发的过滤器将根据客户端IP地址进行过滤,如果客户端的IP地址在限制范围中,那么就不能访问目标的Web服务。过滤器部分代码如下。


例程9 用过滤器限制Web服务的访问权限

package com.hellking.study.webservice;

import javax.servlet.FilterChain;
。。。
public class WebServicesFilter implements Filter
{
     //没有权限访问的IP地址
    static final String[] deniedIPList=new String[]{
                       "123.201",
                       "192.168",
                       "25.46",
                       "124.0.0.1"
                    };   
     public boolean isIPDenied(String ipAddr)
     {
         …
     }
   
    //过滤处理的方法
    public void doFilter(final ServletRequest req,final ServletResponse res,FilterChain chain)
        throws IOException,ServletException
    {
         HttpServletRequest hreq = (HttpServletRequest)req;
         HttpServletResponse hres = (HttpServletResponse)res;
         //HttpSession session = hreq.getSession();
         String clientIp=req.getRemoteAddr();
         System.out.println("开始过滤。。。");
         if(isIPDenied(clientIp))
         {
              //验证不成功,让用户登录。
             throw new ServletException("无权限访问此Web服务!");
          }       
         else
             {
                 //验证成功,继续处理
               chain.doFilter(req,res);            

             }     
            
    }   
    …
}
 


WebServicesFilter 过滤器限制了deniedIPList中指定的所有客户端。编写了过滤器后,需要在Web应用的部署描述符中指定使用此过滤器,并且把过滤器映射到目标URL上。当然,你也可以开发其它过滤器进行访问控制,比如Web服务客户端登录时,把登录信息保存在HTTP会话中,当客户端访问受限的资源时,读取HTTP会话中客户端信息以决定客户端是否有权限访问目标资源。

除了编写Servlet过滤器实现类外,还需要在web.xml中对它进行配置,并且把过滤器映射到要过滤的目标URI上。以下是过滤器的部署描述符。


例程10 部署过滤器

    <filter>
        <filter-name>WebServicesFilter</filter-name>
        <filter-class>com.hellking.study.webservice.WebServicesFilter</filter-class>
    </filter>   
    <filter-mapping>
        <filter-name>WebServicesFilter</filter-name>
        <url-pattern>/services/*</url-pattern>
    </filter-mapping>
    


url-pattern指定了过滤器要过滤的范围。"/services/*"表示以"/services"开始的URL将全部被过滤,这正是AxisServlet默认的URL。通过上面的配置,只要客户端调用axis Web服务,就会被WebServicesFilter过滤器过滤。如果客户端IP地址在过滤器的deniedIPList中,那么就不能访问目标服务。

阿翔编程学-webservice过滤器 过滤器类package baseinfo.com.windtec.offline.server.baseinfo;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;import javax.servlet.Filte 阅读详情

相关推荐

通向架构师的道路(第十三天)Axis2 Web Service安全初步

一、WSSecurity简述 安全的Web服务Web服务成功的必要保证。但大家都知道,Web服务使用XML来进行数据交换,而XML在默认情况下是明文编码的;同时,大部分Web服务使用HTTP协议作为传输协议,同样,HTTP也是使用明文方式来传输数据的。这就造成了在不加密的传输协议上传输不加密的信息,从而使信息传输的保密性受到威胁。作为企业级的应用,以上的方式不能满足安全性基本要求: ²  数

打造全国最全的AI Agent开发知识领域的博客 2万+

WebServic开发之Axis权限控制

    开发好WebService并向外暴露服务后,由于WebService访问协议都是公开的,客户端只要知道服务的wsdl,就可以访问WebService中的方法。为防止非法的访问,可以要求客户端访问WebService时提供用户名口令,只有在服务端通过身份认证后才可继续访问方法,否则请求被拒绝。下面看一下Axis中如何使用用户名、口令来控制对WebService访问。在myse

独行者的专栏 3310

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识

CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找

weixin_49199313的博客 257

如何过滤webservice调用者的ip

1.在工程的web.xml中,会有webservice的配置如axis的配置;只要在在axis配置之前,加入我们自己的filter即可(过滤路径要与axis的一样),可以对应多个filter-mapping 例子: //自己的filter <filter><filter-name>PathFilter&...

weixin_30707875的博客 194

未授权访问漏洞原理以及修复方法

未授权访问漏洞 原理以及修复方法

it知识分享 free for nothing.. 1万+

servlet的生命周期、过滤器Filter

1.什么是生命周期? servlet从创建到初始化再到服务最后到销毁的过程。就是servlet的生命周期。 servlet会在不同的阶段执行不同的方法。 (1)构造方法---->servlet被创建时执行 (2)初始化方法--->servlet创建完成后要初始化一些参数时该方法会被执行。 (3)执行方法--->servlet被调用时。 (4)销毁方法--->servlet被关闭。 package com.aaa.servlet; import javax.servlet.

qq_44189274的博客 589

客户端调用Webservice服务(SSL)

J2EE Web服务开发系列之十二: 实现安全的AXIS Web服务,第1部分文档选项将此页作为电子邮件发送未显示需要 JavaScript 的文档选项

TechChan的专栏 9393

建立安全的AXIS服务()

建立安全的AXIS服务()

走向资深架构师的旅程 783
上一篇: 得到文件的真实路径
下一篇: 资料:修改3389端口终端
bingki
博客等级 码龄20年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值