过滤器Filter

什么是过滤器

  过滤器Filter其实就是Servlet,只不过它的职责是在过滤信息,在请求进入核心servlet时候的过滤,在响应发送给客户端时候的过滤。

使用过滤器

  要想创建自己的Filter,只需要实现Filter接口,重写里面的init方法、doFilter方法、destroy方法。init方法在你进行过滤的时候的初始化方法,doFilter方法就是你的核心过滤方法,里面有两个参数,一个是ServletRequest,另外一个是ServletResponse,前面一个代表的是请求,后面一个代表的是响应,我们的过滤操作就是对请求和响应的信息进行过滤。

过滤器的模式

  一般的过滤器都不是一个,多个过滤器就组成了一个过滤链,一个过滤器执行了自己的doFilter方法后,就可以通过参数FilterChain调用下一个过滤器,这样一个过滤链就形成了。在FilterChian调用下一个doFilter前面过滤的是请求,后面过滤的是响应。

      

编码过滤器

/**
 * 编码过滤器
 * @author xujianguo <Ray_xujianguo@163.com>
 * @date 2014-6-12
 * @CopyRight 2014 Topview Inc.
 * @version V1.0
 */
@WebFilter(urlPatterns={"/*"})
public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("------ EncodingFilter Init ------");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
        response.setCharacterEncoding("UTF-8");
    }

    @Override
    public void destroy() {
        System.out.println("------ EncodingFilter Destroy ------");
    }
}

权限过滤器

/**
 * 登陆过滤器
 * @author xujianguo <Ray_xujianguo@163.com>
 * @date 2014-6-12
 * @CopyRight 2014 Topview Inc.
 * @version V1.0
 */
@WebFilter(filterName="is_login", urlPatterns={"/*"}, 
    initParams={
        @WebInitParam(name="loginPage", value="/login.jsp"),
        @WebInitParam(name="login", value="/login")
    }
)
public class IsLoginFilter implements Filter {
    //过滤器配置
    private FilterConfig config;
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //初始化
        this.config = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //获取登陆页面的路径
        String loginPage = config.getInitParameter("loginPage");
        String login = config.getInitParameter("login");
        //强制转换请求
        HttpServletRequest httpRequest = (HttpServletRequest)request;
        //获取请求的路径
        String requestPath = httpRequest.getServletPath();
        //获取Session
        HttpSession session = httpRequest.getSession();
        
        //判断是否登陆
        if(session.getAttribute("loginUser") == null && !requestPath.endsWith(loginPage) && !requestPath.endsWith(login)) {
            //跳转页面
            request.getRequestDispatcher(loginPage).forward(request, response);
        } else {
            //继续执行
            chain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {
        //销毁
        config = null;
    }
}

posted on 2015-05-04 23:12  进击的Ray_xujianguo  阅读(203)  评论(0编辑  收藏  举报

导航