是什么?
-
Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。
-
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能
- 使用了过滤器之后,要想访问web服务器上的资源,必须先经过滤器,过滤器处理完毕之后,才可以访问对应的资源。
-
过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。
怎么用?
- 第1步,定义过滤器 :1.定义一个类,实现 Filter 接口,并重写其所有方法。
- 第2步,配置过滤器:Filter类上加 @WebFilter 注解 ,配置拦截资源的路径 [@WebFilter(urlPatterns = "/*")] 。引导类上加 @ServletComponentScan 开启Servlet组件支持。

接口方法说明:
- init方法:过滤器的初始化方法。在web服务器启动的时候会自动的创建Filter过滤器对象,在创建过滤器对象的时候会自动调用init初始化方法,这个方法只会被调用一次。
- doFilter方法:这个方法是在每一次拦截到请求之后都会被调用,所以这个方法是会被调用多次的,每拦截到一次请求就会调用一次doFilter()方法。
- destroy方法: 是销毁的方法。当我们关闭服务器的时候,它会自动的调用销毁方法destroy,而这个销毁方法也只会被调用一次。
结合上一篇章:对登录的结合使用: 被带到前端的Token返回后端同样需要校验,使用Filter拦截JWT-Token
- 对于校验令牌 的这一块操作,我们使用登录校验的过滤器,在过滤器当中来校验令牌的有效性。如果令牌是无效的,就响应一个错误的信息,也不会再去放行访问对应的资源了。如果令牌存在,并且它是有效的,此时就会放行去访问对应的web资源,执行相应的业务操作。
登录过程:
-
所有的请求,拦截到了之后,都需要校验令牌吗 ?---登录请求例外
-
拦截到请求后,什么情况下才可以放行,执行业务操作 ? ---有令牌,且令牌校验通过(合法);否则都返回未登录错误结果
登录流程图

拦截请求url,查看令牌是否存在,不存在返回401(HTTP_UNAUTHORITY)
关于过滤器的细节:
1.执行流程
过滤器使用流程逐层进入,顺序退出
2.拦截路径
拦截路径 | urlPatterns值 | 含义 |
---|---|---|
拦截具体路径 | /login | 只有访问 /login 路径时,才会被拦截 |
目录拦截 | /emps/* | 访问/emps下的所有资源,都会被拦截 |
拦截所有 | /* | 访问所有资源,都会被拦截 |
3.过滤器链
即多过滤器组成链条
而这个链上的过滤器在执行的时候会一个一个的执行,会先执行第一个Filter,放行之后再来执行第二个Filter,如果执行到了最后一个过滤器放行之后,才会访问对应的web资源。
访问完web资源之后,按照我们刚才所介绍的过滤器的执行流程,还会回到过滤器当中来执行过滤器放行后的逻辑,而在执行放行后的逻辑的时候,顺序是反着的。