zoukankan      html  css  js  c++  java
  • JavaWeb servlet过滤器

      一.Filter简介:

    ***************************************************************************************

        Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件

    或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处

    理并生成响应,最后Filter 再对服务器响应进行后处理。

      二、Servlet过滤器的特点:

      ***************************************************************************************

        1.Servlet过滤器可以检查和修改ServletRequest和ServletResponse对象

        2.Servlet过滤器可以被指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器

        3.Servlet过滤器可以被串联在一起,形成管道效应,协同修改请求和响应对象

      三、Servlet过滤器的适用场合:
      ***************************************************************************************
        1.认证过滤

        2.登录和审核过滤

        3.图像转换过滤 

        4.数据压缩过滤 

        5.加密过滤 

        6.令牌过滤 

        7.资源访问触发事件过滤 

        8.XSL/T过滤 

        9.Mime-type过滤

      四、Servlet过滤器接口的构成:

      ***************************************************************************************

         所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:

        1.init(FilterConfig):

         这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数

        2.doFilter(ServletRequest,ServletResponse,FilterChain):

         这个方法完成实际的过滤操作,当客户请求访问于过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器

        3.destroy():

         Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源

      五、Servlet过滤器的创建步骤:
      ***************************************************************************************
        1.实现javax.servlet.Filter接口

        2.实现init方法,读取过滤器的初始化函数

        3.实现doFilter方法,完成对请求或过滤的响应

        4.调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

        5.销毁过滤器

      六、Servlet过滤器的发布:
      ***************************************************************************************

        1.发布Servlet过滤器时,必须在web.xml文件中加入<filter>元素和<filter-mapping>元素。

        2.<filter>元素用来定义一个过滤器:

        属性                   含义

          filter-name    指定过滤器的名字

          filter-class    指定过滤器的类名

          init-param    为过滤器实例提供初始化参数,可以有多个

        3.<filter-mapping>元素用于将过滤器和URL关联:

          属性                     含义

          filter-name    指定过滤器的名字

          url-pattern    指定和过滤器关联的URL,为”/*”表示所有URL

    public class LoginFilter implements Filter {
    
        private String urlPath;// 用来存放不需要判断的页面路径
    
        public LoginFilter() {
        }
    
        public void destroy() {
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
    
            String[] urls = urlPath.split(",");
            for (String s : urls) {
                String reqPath = request.getRequestURI();
                if (reqPath.indexOf(s) != -1) {
                    chain.doFilter(request, response);
                    return;
                }
            }
            Object obj = request.getSession().getAttribute("currentUser");
            if (obj == null) {
                response.sendRedirect("login.jsp");
            } else {
                chain.doFilter(request, response);
            }
        }
    
        public void init(FilterConfig fConfig) throws ServletException {
            urlPath = fConfig.getInitParameter("initPath");
        }
    
    }
  • 相关阅读:
    第二次会议记录(2021.7.19)
    第一次会议记录(2021.7.8)
    软件工程助教工作总结
    Linux下的常用命令
    GPIO输出——使用固件库点亮LED 宏定义遇到的问题
    STM32 GPIO BRR和BSRR寄存器
    snprintf()函数使用方法
    结构体元素偏移量宏的定义及解析
    函数指针&回调函数Callback
    解析#define NULL ((void *)0)——野指针,空指针和 void*
  • 原文地址:https://www.cnblogs.com/bekeyuan123/p/7082716.html
Copyright © 2011-2022 走看看