使用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中,那么就不能访问目标服务。
相关推荐
通向架构师的道路(第十三天)Axis2 Web Service安全初步
一、WSSecurity简述 安全的Web服务是Web服务成功的必要保证。但大家都知道,Web服务使用XML来进行数据交换,而XML在默认情况下是明文编码的;同时,大部分Web服务使用HTTP协议作为传输协议,同样,HTTP也是使用明文方式来传输数据的。这就造成了在不加密的传输协议上传输不加密的信息,从而使信息传输的保密性受到威胁。作为企业级的应用,以上的方式不能满足安全性基本要求: ² 数
WebServic开发之Axis权限控制
开发好WebService并向外暴露服务后,由于WebService访问协议都是公开的,客户端只要知道服务的wsdl,就可以访问WebService中的方法。为防止非法的访问,可以要求客户端访问WebService时提供用户名和口令,只有在服务端通过身份认证后才可继续访问方法,否则请求被拒绝。下面看一下Axis中如何使用用户名、口令来控制对WebService的访问。在myse
【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识
CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找
如何过滤webservice调用者的ip
1.在工程的web.xml中,会有webservice的配置如axis的配置;只要在在axis配置之前,加入我们自己的filter即可(过滤路径要与axis的一样),可以对应多个filter-mapping 例子: //自己的filter <filter><filter-name>PathFilter&...
未授权访问漏洞原理以及修复方法
未授权访问漏洞 原理以及修复方法
servlet的生命周期、过滤器Filter
1.什么是生命周期? servlet从创建到初始化再到服务最后到销毁的过程。就是servlet的生命周期。 servlet会在不同的阶段执行不同的方法。 (1)构造方法---->servlet被创建时执行 (2)初始化方法--->servlet创建完成后要初始化一些参数时该方法会被执行。 (3)执行方法--->servlet被调用时。 (4)销毁方法--->servlet被关闭。 package com.aaa.servlet; import javax.servlet.
客户端调用Webservice服务(SSL)
J2EE Web服务开发系列之十二: 实现安全的AXIS Web服务,第1部分文档选项将此页作为电子邮件发送未显示需要 JavaScript 的文档选项
建立安全的AXIS服务(上)
建立安全的AXIS服务(上)
2万+


&spm=1001.2101.3001.11974&articleId=5757159&d=1&t=3&u=8f43cf66e4144ff6a5eb740488fbfe43)

被折叠的 条评论
为什么被折叠?



