关于JWT令牌和过滤器以及拦截器的实现流程

本文涉及的产品
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
函数计算FC,每月15万CU 3个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: JWT令牌用于验证用户请求合法性,登录时通过Filter或Interceptor校验账号密码,生成JWT并返回给前端保存。请求时,后端通过解析令牌检查其完整性、时效性和合法性。Filter在请求处理前检查是否携带JWT,Interceptor的preHandle方法同样用于此目的。两者选择其一即可,拦截器配置更精确但稍复杂。

前言:首先讲jwt令牌,其实就是token,主要用于鉴别用户请求是不是合法的,怎么校验?给它标记!当用户登录时,通过过滤器或者拦截器对请求进行拦截,如果是登录请求,让用户登录,登录校验账号密码没问题了,给它制作个jwt令牌,让他拿着这个令牌返回前端,并且保存起来,后续只要在同一个浏览器且不跨域的情况下,token都会生效,每个请求打到后端都会对令牌进行解析,查看是否有效,有效指的是:token完整性,时效性,合法性,我们在生成令牌的时候会给这个令牌进行设置,以上就是关于令牌、过滤器、拦截器的由来

实质上,过滤器和拦截器功能相仿,只需要用到一个就行了,只是顺带讲了,勿要多疑!接下来看看代码实现吧

1.首先是jwt令牌的额制作和解析
image.png
signKey是签名,确保令牌数据不会被篡改(我是这么理解的,我不太确定哈哈哈),expire是有效时间,平时登录网页不都是登录之后一定时间就自动退出了吗,应该就是这玩意

2.然后看这个登录接口,这里在登录验证成功后调用了令牌制作的额方法并传递了“claims”,claims 参数是用于包含关于用户或其他实体的声明(statements)的JSON对象。这些声明可以是标准的(由JWT规范定义)或自定义的
image.png
那么以上步骤就实现了用户登录及令牌的发放,避免了用户在没有登录的情况下访问其他接口

再讲jwt令牌token,既然token有了,那我登录之后,从新开了个页面或者直接访问其他路径(没有跨域的情况下),你怎么校验我有没有登录呢,举个例子:后端服务本地启动后端口为8080,访问登录接口localhost:8080/login,登录之后token就生成并保存在前端浏览器了,每次请求就会携带这个token,但是现在我直接叉掉登录的页面,然后直接访问localhost:8080/emp,没有跨域,同一个服务,token也还在时效内,是不是就需要个东西拦截这个请求,然后解析token看是否合法?合法则直接给他访问,不合法则退回登录页面

先来看filter过滤器,实现Filter接口并重写所有方法,重点是第二个doFilter方法,他是在请求方法执行前执行的,也就是你执行登录请求,在登录的controller执行前,他会将你拦截,并进行逻辑处理,这里逻辑处理不就可以判断是不是登录接口了吗,如果是自然不用拦截了,如果不是就要看看是否携带token了,并检查是否合法有效,具体逻辑看代码吧
image.png

然后是怎么设置拦截哪些请求,看下图,就是这个注解,还可以用web.xml进行配置,注解的话加载Filter实现类上就行了
image.png

然后是拦截器,和过滤器80%相似,也是实现接口,这里是实现HandlerInterceptor,并重写方法,拦截器得的主要方法是preHandle,也是在方法执行前执行,下面处理逻辑的代码,就都一样了
image.png

然后也是设置拦截哪些请求,和过滤器不一样,他编写一个配置类来拦截,实现WebMvcConfigurer,然后可以设置拦截哪些请求和不拦截哪些请求,这点我觉得比过滤器好,更加精确,就是稍微麻烦点
image.png

下班了,赶着下班,有点糙,将就吧

相关文章
|
3月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
195 0
|
5月前
|
存储 JSON 安全
JWT令牌详解
JWT令牌详解
149 3
|
27天前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
46 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
3月前
|
JSON Java API
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
|
6月前
|
JSON 安全 程序员
[JavaWeb]——JWT令牌技术,如何从获取JWT令牌
[JavaWeb]——JWT令牌技术,如何从获取JWT令牌
100 0
JWT令牌,JWT令牌的后续使用,在其他端口中使用的注意事项?如果你编写了JWT令牌的话,在下一次请求当中,都需要添加的,如果你已经配置好了WebConfig和Inter 就不用配了,添加了拦截器之后
JWT令牌,JWT令牌的后续使用,在其他端口中使用的注意事项?如果你编写了JWT令牌的话,在下一次请求当中,都需要添加的,如果你已经配置好了WebConfig和Inter 就不用配了,添加了拦截器之后
|
6月前
|
存储 JSON 算法
SpringBoot之JWT令牌校验
SpringBoot之JWT令牌校验
187 2
|
6月前
|
JSON 前端开发 Java
|
6月前
|
JSON 前端开发 Java
JWT解密:探秘令牌魔法与Java的完美交互
JWT解密:探秘令牌魔法与Java的完美交互
77 0
JWT解密:探秘令牌魔法与Java的完美交互
|
6月前
|
前端开发 Java Spring
SpringBoot通过拦截器和JWT令牌实现登录验证
该文介绍了JWT工具类、匿名访问注解、JWT验证拦截器的实现以及拦截器注册。使用`java-jwt`库生成和验证JWT,JwtUtil类包含generateToken和verifyToken方法。自定义注解`@AllowAnon`允许接口匿名访问。JwtInterceptor在Spring MVC中拦截请求,检查JWT令牌有效性。InterceptorConfig配置拦截器,注册并设定拦截与排除规则。UserController示例展示了注册、登录(允许匿名)和需要验证的用户详情接口。
863 1