Filter过滤器

1、过滤器三要素

  • 拦截:一个请求必须先把它拦住,才能做后续处理
  • 过滤:预设的检查条件,满足条件才可以放行
  • 放行:对于满足要求的请求,放它过去,让它原本要访问什么资源就继续还是访问那个资源

2、过滤器生命周期

生命周期环节调用的方法时机次数
创建对象 无参构造器 默认:Web应用启动时 一次
初始化 init(FilterConfig filterConfig) 创建对象后 一次
处理请求 doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
接收到请求后 多次
清理操作 destroy() Web应用卸载之前 一次

3、拦截请求时的匹配规则

  • 精确匹配
    <!-- 配置Filter要拦截的目标资源 -->
    <filter-mapping>
        <!-- 指定这个mapping对应的Filter名称 -->
        <filter-name>Target01Filter</filter-name>
    
        <!-- 通过请求地址模式来设置要拦截的资源 -->
        <url-pattern>/Target01Servlet</url-pattern>
    </filter-mapping>
  • 模糊匹配★
    • 前杠后星:/user/*
      <filter-mapping>
          <filter-name>Target02Filter</filter-name>
      
          <!-- 模糊匹配:前杠后星 -->
          <!--
              /user/Target02Servlet
              /user/Target03Servlet
              /user/Target04Servlet
          -->
          <url-pattern>/user/*</url-pattern>
      </filter-mapping>
    • 前星后缀:*.html
      <filter>
          <filter-name>Target04Filter</filter-name>
          <filter-class>com.atguigu.filter.filter.Target04Filter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>Target04Filter</filter-name>
          <url-pattern>*.png</url-pattern>
      </filter-mapping>
  • 根据Servlet名称匹配

4、Filter链

  • 概念:拦截同一资源的多个Filter
  • 执行顺序:由web.xml中filter-mapping配置的顺序决定
  • chain.doFilter(requset,response):将请求放行到Filter链中的一下一个Filter,如果当前Filter已经是最后一个了,那么直接放行这个请求去访问原本要访问的资源
posted @ 2022-05-14 12:20  93丶Fss  阅读(77)  评论(0)    收藏  举报