四:刷新令牌应该如何设计?
4.1 为什么要刷新Token的过期时间?
我们在定义JwtUtil工具类的时候,生成的 Token 都有过期时间。那么问题来了,假设 Token 过 期时间为15天,用户在第14天的时候,还可以免登录正常访问系统。但是到了第15天,用户的 Token过期,于是用户需要重新登录系统。
HttpSession 的过期时间比较优雅,默认为15分钟。如果用户连续使用系统,只要间隔时间不超 过15分钟,系统就不会销毁 HttpSession 对象。JWT的令牌过期时间能不能做成 HttpSession 那样超时时间,只要用户间隔操作时间不超过15天,系统就不需要用户重新登录系统。实现这种 效果的方案有两种: 双Token 和 Token缓存 ,这里重点讲一下 Token 缓存方案。
————————————————
Token缓存方案是把 Token 缓存到 Redis ,然后设置 Redis 里面缓存的 Token 过期时间为正常
Token 的 1 倍 , 然后根据情况刷新 Token 的过期时间。
Token 失效,缓存也不存在的情况
当第15 天,用户的 Token 失效以后,我们让 Shiro 程序到 Redis 查看是否存在缓存的 Token ,如 果这个 Token 不存在于 Redis 里面,就说明用户的操作间隔了 15 天,需要重新登录。
Token 失效,但是缓存还存在的情况
如果Redis中存在缓存的 Token ,说明当前 Token 失效后,间隔时间还没有超过15天,不应该让用户重新登录。所以要生成新的 Token 返回给客户端,并且把这个 Token 缓存到Redis里面,这种操作成为刷新 Token 过期时间。
————————————————