zoukankan      html  css  js  c++  java
  • Filter过滤器笔记1

    Filter:过滤器  

       Filter主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。使用Filter的完整流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理


    创建Filter的步骤:

      1.创建Filter处理类

      2.在web.xml文件中配置Filter(或者直接使用注解)

      创建Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法。
        void init(FilterConfig config):用于完成Filter的初始化
        void destroy():用于Filter销毁前,完成某些资源的回收
        void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能,该方法就是对每个请求以及响应增加的额外处理

      下面示例一个比较实用的Filter,该Filter对用户请求进行过滤,Filter将通过doFilter方法来设置request编码的字符集,从而避免每个jsp,Servlet都需要设置,而且还会验证用户是否登录,如果用户没有登录,系统直接跳转到登录页面。


      程序例子:

    /**
     * Description:设置request的编码集,并验证用户是否登录
     * Author: Eleven
     * Date: 2018/1/6 15:43
     */
    @WebFilter(filterName = "loginFilter",
            urlPatterns = {"/*"}, //该Filter拦截该项目下的所有用户请求
            initParams = {//配置Filter初始化参数
                @WebInitParam(name="encoding",value="GBK"),
                @WebInitParam(name="loginPage",value="/login.jsp")})
    public class LoginFilter implements Filter {
    
        //FilterConfig可用于访问Filter的配置信息
        private FilterConfig config;
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.config = filterConfig;
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
            //获取Filter的配置参数
            String encoding = config.getInitParameter("encoding");
            String loginPage = config.getInitParameter("loginPage");
    
            //设置request编码用的字符集
            servletRequest.setCharacterEncoding(encoding);
            System.out.println("设置编码完成");
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            //获取客户请求的页面
            String requestPath = request.getServletPath();
            System.out.println("用户请求页面:"+requestPath);
            //判断用户是否登录
            HttpSession session = request.getSession();
            //没有登录,且访问页面不是登录也页面
            if(session.getAttribute("user") == null && !requestPath.endsWith(loginPage)){
                //转发到登录页面
                request.getRequestDispatcher("/jsp/login.jsp").forward(servletRequest,servletResponse);
            }else{
                //放行
                chain.doFilter(servletRequest,servletResponse);
            }
    
        }
    
        @Override
        public void destroy() {
            this.config = null;
        }
    }

      

    Filter的种类:
      1.用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求

      2.日志Filter:详细记录某些特殊的用户请求

      3.负责解码的Filter:包括对非标准编码的请求解码

      4.能改变XML内容的XSLT Filter等

      5.Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截

  • 相关阅读:
    Linux性能及调优指南(翻译)之Linux内存架构
    dtrace4linux
    perlchina2016 大会
    GO 语言圣经 -在线阅读
    dtrace4linux_Example
    hellogcc -100GDB技巧
    ITGEGE在线教育
    编译系统透视:图解编译原理
    C 高级编程5 IO与文件权限
    C 高级编程4 makefile 与 IO
  • 原文地址:https://www.cnblogs.com/eleven258/p/8275531.html
Copyright © 2011-2022 走看看