Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1530658
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 20:07:53

一起学习
如果你想安装一个带有访问限制的servlet,但同时为了保证其安全又不想改变其源代码,那么你应该使用一个servlet过滤器。 Servlet过滤器包含在Java Servlet规范2.3版本中。它能够让你在servlet运作前截取请求,也能让你在servlet运作后修改请求。例如,如果用户已经登陆进入系统,那么MenuLabelFilter使用用户的配置取代了i18n的系统标签,书写格式为${propertyfile.menu.label},如果用户是guest,则使用浏览器缺省配置。 一个servlet过滤器可以分为两个部分:Java类自身以及在web.xml文件中的XML。要作为servlet过虑器的Java类必须实现javax.servlet.Filter接口。该接口由一对自描述的生命周期的方法init(FilterConfig)、destroy()和一个行为方法doFilter(ServletRequest,ServletResonse,FilterChain)。后者的设计看上去类似于doGet或者doPost。 下面是一个IP管理的servlet过滤器例子: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class IPMonitorFilter implements Filter { private FilterConfig config = null; public void init(FilterConfig config) throws ServletException { this.config = config; } public void destroy( ) { this.config = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if(config == null) { return; } String legalIP = this.config.getInitParameter("LegalIP"); String thisIP = request.getRemoteAddr( ); if(legalIP.equals(thisIP)) { chain.doFilter(request, response); } else { response.setContentType("text/html"); PrintWriter out = response.getWriter( ); out.write("You are not allowed to connect " "to this URL at the moment. "); } } } 将IPMonitorFilter放在servlet上的web.xml条目称为SecretServlet,可以写为如下:

IPMonitorFilter
com.generationjava.tips.IPMonitorFilter

LegalIP
192.168.13.15



IPMonitorFilter
/secret


SecretServlet
com.generationjava.tips.SecretServlet


SecretServlet
/secret

在上面的例子中,处理过滤的XML看上去与处理servlet的XML非常类似。当设置完成后,SecretServlet将只能被192.168.13.15的当地地址访问。当只允许一个内部用户访问这个页面或者对一个不同的ip地址给予其客户访问某个数据集的权限时,这种方法尤其有用。 下载本文示例代码


Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问Java Servlet规范2.3中的过滤器访问
阅读(113) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~