Smith-Cruise / Spring-Boot-Shiro

Shiro基于SpringBoot +JWT搭建简单的restful服务
1.64k stars 504 forks source link

关于token超时的问题 #40

Closed heshao98 closed 5 years ago

heshao98 commented 5 years ago

老铁, 能不能集成jwt的 refreshToken呢 , 现在过期时间是五分钟时间短, 就算延长了1小时的话, 那如果过期了的话, 用户还是要重新登录, 能不能通过不重新登录的方式, 而重新获取一个token呢 ?

dolyw commented 5 years ago

image

https://github.com/wang926454/ShiroJwt

heshao98 commented 5 years ago

首先感谢您的回复, 我看了这个链接的代码, 发现是根据时间戳来判断的并不是密码, 请问如果我想用refreshToken 来获取一个新的accessToken的话 该怎么用 , 有点纠结, 您能给个思路吗?

dolyw commented 5 years ago

就是根据token判断啊,token是认证错误还是过期的会有异常抛出,错误就直接返回错误了,是过期再看refreshtoken是否存在,存在才刷新 image

heshao98 commented 5 years ago

image image 是这样的 , 进入这个方法后就代表, accessToken是过期了的, 如果已经过期了, 我们还能像图中标记的位置一样 , 获取到用户名吗 ?

heshao98 commented 5 years ago

image 而且我这里返回的accessToken 使用用户名和密码签名得到的, 如果到了tokenFilter里面的话, 就算拿到了用户名 那需要生成新的accessToken的时候也是需要密码的, 难道要在filter里面把密码给取出来,然后在生成一个新的accessToken? 本人有点愚钝还望大佬告知!

dolyw commented 5 years ago

你先了解下jwt,jwt的信息就是一个json的base64编码,你base64解码就能获取到了,和你是否过期无关,这个信息是公开的,一般不放密码等私密信息,既然过期的那个token认证是过期而不是认证失败,说明是之前的用户,继续用这个token携带的账号生成一个token返回就好了

heshao98 commented 5 years ago

嗯, 大概懂您说的意思了, 我去试试,, 再此谢过大佬!!!!!!!

heshao98 commented 5 years ago

您好, 我有个问题, 就是如果我登录成功了 返回accessToken 和 refershToken , 然后我只在 redis 缓存refershToken 就好了吧, 然后 我根据用户名 就可以知道我的refreshToken 有没有过期, 这样的话是不是就可以不用前端在传过来了, 因为感觉生成accessToken 不依赖 refreshToken