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

相关推荐
孙启超2 分钟前
【AI开发之Rust】第 13 课:async/await 与 tokio 异步运行时
开发语言·后端·rust
SimonKing13 分钟前
SpringBoot 集成 SSE 实现服务端推送或可代替Websocket
java·后端·程序员
字节探索13 分钟前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
Sam_Deep_Thinking32 分钟前
关于java final关键字的可见性
java·后端·面试·程序员
Thneonl39 分钟前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
zihan5181 小时前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
乌暮2 小时前
Java 抽象类与接口详解:半成品图纸 vs 能力合同
java·开发语言·后端·学习
一条泥憨鱼2 小时前
苍穹外卖【day12| 工作台,通过Apache POI导入/导出运营数据】
java·后端·苍穹外卖
IT_陈寒2 小时前
Redis大key删除引发的服务雪崩,这次我真记住了
前端·人工智能·后端
努力的小雨2 小时前
10 个任务拆成 22 项能力,Seed 2.1 Pro 哪些方向值得用?
后端