Jfinal结合redis实现JWT的token安全验证

一、前言

    JSON Web Token(JWT),是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。关于jWT的结构介绍和验证原理小白用户可以参考下这篇博文

https://blog.csdn.net/wandoubi/article/details/79418107

二、项目基本结构

image.png

初始化一个jfinal的maven结构基本项目,引入redis插件(POM文件引入相应的jar包)。

image.png

三、实现思路

    手写一个token拦截器JwtTokenInterceptor(拦截器的实现方法可以参考jfinal官方手册)作用于controller层,在每个需要做token验证的接口方法上加上拦截验证。具体思路:用户登录成功以后根据用户userId生成JWT的token存入redis中然后返回token给前端,前端拿到token以后后面请求其他接口需要带上token参数,JwtTokenInterceptor拦截到token以后做验证,验证成功返回接口信息,验证失败则返回错误提示。

(一)Controller层实现

image.png

image.png

(二)拦截器实现

image.png

(三)token管理工具

image.pngimage.pngimage.png

(四)测试接口

1.登录成功返回token信息

image.png

2.请求其他接口,如果用错误或者过期的token会返回错误提示

image.png

贴出代码,养成随手做笔记的习惯,不足之处请多多指正!项目地址:https://gitee.com/andrewtsengvip/jfinal-redis-jwt-master


评论区

JFinal

2018-07-03 16:29

代码简洁,整合简单,感谢你的分享,收藏 + 点赞

AndrewTseng

2018-07-03 16:58

谢谢波总支持

HingLo

2018-07-11 10:28

代码实现非常简洁易懂,但是我建议将token 放在请求头中,这样请求的url不会太臃肿,同时也可以隐藏一下token

AndrewTseng

2018-07-20 10:37

@HingLo 感谢你的建议,正规项目中token放在请求头中,结合https安全些。这个只是个demo演示。

hotsmile

2018-10-11 13:36

token 还是放在head部分比较好!!!

playsex

2019-04-26 20:01

JWT失效时间到达后,是否要重新登录

你好啊世界

2019-09-25 15:29

@AndrewTseng 这个jwt token 使用自身的过期时间鉴权。不明白token缓存到redis 里有什么用;请教。

你好啊世界

2019-09-25 15:45

在token有效但用户已停用或用户注销登录时要用到,服务端还是需要维护一个状态,可以使用缓存匹配处理,失效token。

maxwade

2019-10-16 10:05

代码很精简,已经放在自己的脚手架中,另建议将token存于数据库,类似于club中的sessionId,则可以支持自动重启

mousefly

2020-03-07 11:36

只有10分钟过期时间吗

mousefly

2020-03-07 14:51

缓存总是出错啊

热门分享

扫码入社