用过滤器限制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服务!");
//res.sendRedirect("../failure.jsp");
}
else
{
//验证成功,继续处理
chain.doFilter(req,res);
}
}
…
}
Request获取url各种信息
url地址是
http://www.test.com/testweb/default.aspx , 结果如下:
Request.ApplicationPath: /testweb
Request.CurrentExecutionFilePath: /testweb/default.aspx
Request.FilePath: /testweb/default.aspx
Request.Path: /testweb/default.aspx
Request.PathInfo:
Request.PhysicalApplicationPath: E:\WWW\testweb\
Request.PhysicalPath: E:\WWW\testweb\default.aspx
Request.RawUrl: /testweb/default.aspx
Request.Url.AbsolutePath: /testweb/default.aspx
Request.Url.AbsoluteUri: htt p://www.test.com/testweb/default.aspx
Request.Url.Host: www.test.com
Request.Url.LocalPath: /testweb/default.aspx
Request.ApplicationPath: /testweb
Request.CurrentExecutionFilePath: /testweb/default.aspx
Request.FilePath: /testweb/default.aspx
Request.Path: /testweb/default.aspx
Request.PathInfo:
Request.PhysicalApplicationPath: E:\WWW\testweb\
Request.PhysicalPath: E:\WWW\testweb\default.aspx
Request.RawUrl: /testweb/default.aspx
Request.Url.AbsolutePath: /testweb/default.aspx
Request.Url.AbsoluteUri: htt p://www.test.com/testweb/default.aspx
Request.Url.Host: www.test.com
Request.Url.LocalPath: /testweb/default.aspx
WebServicesFilter 过滤器限制了deniedIPList中指定的所有客户端。编写了过滤器后,需要在Web应用的部署描述符中指定使用此过滤器,并且把过滤器映射到目标 URL上。当然,你也可以开发其它过滤器进行访问控制,比如Web服务客户端登录时,把登录信息保存在HTTP会话中,当客户端访问受限的资源时,读取 HTTP会话中客户端信息以决定客户端是否有权限访问目标资源。
除了编写Servlet过滤器实现类外,还需要在web.xml中对它进行配置,并且把过滤器映射到要过滤的目标URI上。以下是过滤器的部署描述符。
<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中,那么就不能访问目标服务。