一、有过滤器存在的访问流程

  1. 首先执行过滤器放行代码上面的代码
  2. 接着执行服务器中被过滤器指定为需要过滤的资源
  3. 最后返回过滤器执行放行代码下面的代码

二、过滤器配置详解(@WebFilter后面的东西)

1. 浏览器发送一个请求经过滤器最终要到达的资源文件的路径配置:

  1. 具体资源: / 资源路径
  2. 目录: / 目录名 / * 拦截目录下的所有资源
  3. 后缀名: * . 后缀名
  4. 所有资源: / *

2. 设置以何种方式被访问到的目标资源文件才会被过滤器过滤

一个资源文件被访问到的方式有许多种,有浏览器直接输入目标资源路径访问,有浏览器输入一个路径,然后该路径请求转发到目标资源文件的访问……因此,我们可以手动设置以何种方式被访问到的目标资源文件才会被过滤器过滤!

  1. DispatcherType.REQUEST:默认值,浏览器直接请求该资源
  2. DispatcherType.FORWARD:请求转发访问资源
  3. DispatcherType.INCLUDE:包含访问资源
  4. DispatcherType.ERROR:错误跳转资源
  5. DispatcherType.ASYNC:异步访问资源

举例如下:

  • 只有以直接访问的方式访问index.jsp才会执行过滤器(比如浏览器直接访问index.jsp)

QQ图片20200715205425.png


  • 只有以请求转发的方式访问index.jsp才会执行过滤器(比如浏览器输入UserServlet,而这个Servlet里面有请求转发到index.jsp)

QQ图片20200715205723.png


  • 只有以直接访问或者请求转发的方式访问index.jsp才会执行过滤器(组合)

QQ图片20200715205859.png


三、过滤器链

1. 执行规则

如果有过滤器1和过滤器2

执行顺序:过滤器1—>过滤器2—>目标资源—>过滤器2—>过滤器1

2、过滤器谁先谁后的规则

按照字符串的比较规则来规定,值小的先执行

如:AFilter BFilter 就是AFilter先执行

如:Filter1 Filter2 就是Filter1先执行