JWT(令牌)、Filter(过滤器)和interceptor(拦截器) -----(Filter)

是什么?

  • 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资源,执行相应的业务操作。

登录过程:

  1. 所有的请求,拦截到了之后,都需要校验令牌吗 ?---登录请求例外

  2. 拦截到请求后,什么情况下才可以放行,执行业务操作 ? ---有令牌,且令牌校验通过(合法);否则都返回未登录错误结果

登录流程图

拦截请求url,查看令牌是否存在,不存在返回401(HTTP_UNAUTHORITY)

关于过滤器的细节:

1.执行流程

过滤器使用流程逐层进入,顺序退出

2.拦截路径

拦截路径 urlPatterns值 含义
拦截具体路径 /login 只有访问 /login 路径时,才会被拦截
目录拦截 /emps/* 访问/emps下的所有资源,都会被拦截
拦截所有 /* 访问所有资源,都会被拦截

3.过滤器链

即多过滤器组成链条

而这个链上的过滤器在执行的时候会一个一个的执行,会先执行第一个Filter,放行之后再来执行第二个Filter,如果执行到了最后一个过滤器放行之后,才会访问对应的web资源。

访问完web资源之后,按照我们刚才所介绍的过滤器的执行流程,还会回到过滤器当中来执行过滤器放行后的逻辑,而在执行放行后的逻辑的时候,顺序是反着的

相关推荐
泉城老铁1 分钟前
SpringBoot集成EasyPoi,实现Excel模板导出成PDF文件
后端
程序视点3 分钟前
Microsoft .Net 运行库离线合集包专业解析
前端·后端·.net
欲儿9 分钟前
LiteCloud超轻量级网盘项目基于Spring Boot
java·spring boot·后端·轻量级网盘项目
麦麦麦造11 分钟前
一键把网页转成 LLM 友好格式的工具?
后端·python
想当花匠的小码农18 分钟前
golang 项目 OpenTelemetry 实践
后端
Jiude21 分钟前
如何使用 Certbot 为域名配置永久免费的 HTTPS 证书
后端·nginx·https
basketball61629 分钟前
Linux C 进程基本操作
linux·运维·服务器·c语言·后端
ku_code_ku38 分钟前
Django由于数据库版本原因导致数据库迁移失败解决办法
后端·python·django
JavaGuide1 小时前
感谢数字马力收留,再也不想面试了!!
java·后端
37手游后端团队1 小时前
Eino大模型应用开发框架深入浅出
人工智能·后端