一、要实现的功能

        1.使用Filter对用户进行权限控制,使没有权限的用户不能访问指定一面。

二、实现思路

         1.其实没什么思路,很简单的问题,Filter就相当于在客户端和服务端装了一个防火墙,所有请求在发送到服务端进行处理之前,都要先通过防火墙的安检,合法的用户就让你访问服务资源,不合法的用户就让他登录后再访问。Filter还有其他的功能,比如说和FilterChain一起使用,可以进行好几次过滤,除了过滤权限,还可以过滤特殊以及非法的字符。进行统一编码之类的工作。

         2.Filter的基本原理在http://zhangjunhd.blog.51cto.com/113473/20629写的很好。

三、代码

 

  1. public class UserFilter implements Filter{ 
  2.      
  3.     public void init(FilterConfig config)throws ServletException{//初始化过滤器 
  4.          
  5.     } 
  6.          
  7.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  
  8.         throws IOException, ServletException {//进行过滤 
  9.          
  10.         HttpServletRequest req = (HttpServletRequest) request; 
  11.         HttpServletResponse resp = (HttpServletResponse) response; 
  12.         HttpSession session = req.getSession();      
  13.          
  14.         Map map = (Map) req.getSession().getAttribute("LoginUser");      
  15.         if (null==map) {//过滤条件       
  16.              
  17.             resp.sendRedirect("/error.jsp");//失败后跳转页面 
  18.         }else { 
  19.             chain.doFilter(request, response);//将请求转发到下一个过滤器 
  20.         }        
  21.     } 
  22.     public void destroy() { 
  23.      
  24.     } 

四、总结

       1.又是一个非常简单的问题让我花了那么长时间,思路上没什么问题,这和访问控制列表在思想上是差不多的,不就是进行判断吗,关键是代码的组织上,在跳转页上遇到了些小问题,路径前面忘了加/了,真无语了。

       2.还有一个问题是不能忽视的,FilterConfig,这个是根据你的需求进行个性化配置的东西,可以在部署描述中即在web.xml中进行初始化配置。

       3.在web.xml中部署Filter的时候<filter-mapping>元素还可以包含0-4个<dispatcher>元素,<dispatcher>元素指定指定过滤器对应的请求方式,REQUEST,INCLUDE,FORWARD,ERROR四种之一,默认为REQUEST.这里的意思就是说,Filter不但能接收用户用REQUEST方式提交的请求,还能接受通过RequestDispatacher“转发”过来的请求。

     4.这只是最简单的过滤的问题,还有替换的功能。这里先不说了。