实战!退出登录时如何借助外力使JWT令牌失效?(二)

love374
发布于 2022-7-11 11:47
浏览
0收藏

 

这里我是把JWT相关的信息同时封装到了Request中,实体类为JwtInformation,如下:

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
LoginVal继承了JwtInformation,如下:

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
此时AuthenticationFilter这个过滤器修改起来就很简单了,只需要将jti和过期时间封装到LoginVal中即可,关键代码如下:

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
逻辑很简单,上图都有标注。

3、注销接口实现
之前文章中并没有提供注销接口,因为无状态的JWT根本不需要退出登录,傻等着过期呗。

当然为了实现注销登录,借助了Redis,那么注销接口必不可少了。

逻辑很简单,直接将退出登录的JWT令牌的jti设置到Redis中,过期时间设置为JWT过期时间即可。代码如下:

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
OK了,至此已经实现了JWT注销登录的功能.......

“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9529 获取!”


涉及到的三个模块的改动,分别如下:

实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区

总结

思想很简单,JWT既然是无状态的,只能借助Redis记录它的状态,这样才能达到使其失效的目的。

测试
业务基本完成了,下面走一个流程测试一下,如下:

1、登录,申请令牌

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
2、拿着令牌访问接口

该令牌并没有注销,因此可以正常访问,如下:

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
3、调用接口注销登录

请求如下:

 实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区
4、拿着注销的令牌访问接口

由于令牌已经注销了,因此肯定访问不通接口,返回如下:

实战!退出登录时如何借助外力使JWT令牌失效?(二)-鸿蒙开发者社区

文章转自公众号:码猿技术专栏

标签
已于2022-7-11 11:47:26修改
收藏
回复
举报
回复
    相关推荐