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资源之后,按照我们刚才所介绍的过滤器的执行流程,还会回到过滤器当中来执行过滤器放行后的逻辑,而在执行放行后的逻辑的时候,顺序是反着的

相关推荐
公众号-老炮说Java28 分钟前
Spring AI Alibaba 硬核实战:Token 原理 → RAG → 多智能体,一篇通
java·人工智能·后端·spring
zoyation32 分钟前
Spring Boot多数据源
java·spring boot·后端
云登指纹浏览器35 分钟前
指纹浏览器自动化API对接实战总结:技术方案选型 + 避坑指南
运维·后端·自动化
绝知此事41 分钟前
ELK 从入门到精通:Spring Boot 实战三部曲(一)—— 基础核心与快速上手
spring boot·后端·elk
土狗TuGou1 小时前
SQL内功笔记 · 第5篇:SQL逻辑执行顺序
数据库·笔记·后端·sql·mysql
为思念酝酿的痛9 小时前
POSIX信号量
linux·运维·服务器·后端
小羊在睡觉9 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
swipe10 小时前
Neo4j + Graph RAG 医疗知识图谱工程实践:患者教育问答真正需要的是“关系可追溯”
后端·langchain·llm
源码宝11 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
金銀銅鐵12 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端