采用JWT有效期内刷新Token方案,解决并发请求问题

继前面在Shiro整合JWT+Token过期刷新一文中,已经集成了shiro以及JWT,并且玩儿的开心觉得一切都很自然。然而有一天当看到日志中,同一时间报出了十多条AuthenticationException时,才发现有些东西被忽略了。回顾下我们之前的思路,当服务端在检查到请求的令牌过期之后,会刷新Token重新颁发令牌,并且再次做登录操作,看似平静友好无感知,但试想一下,在页面加载后倘若同一个页面中有多个请求几乎同一时间发起,每一个请求都携带原始令牌,在这样的设计下,就有可能出现在第一个请求到达后刷新了Token,并更改了缓存中的refreshToken的时间戳,以至于剩余请求校验时发现时间戳不一致导致验证失败而在日志中多次打印出当前Token已经失效的log。同时发起的请求越多,log中的异常也就会越多。虽然第一个请求已经刷新了Token,但是其余的请求是失败的,页面中的数据并不完整,显然这是不正常的,那该如何解决呢?... 详情

Shiro整合JWT+Token过期刷新,全都帮你整好了

最近使用SpringBoot集成Shiro,JWT快速搭建了一个后台系统,Shiro前面已经使用过,JWT(JSON Web Tokens)是一种用于安全的传递信息而采用的一种标准。Web系统中,我们使用加密的Json来生成Token在服务端与客户端无状态传输,代替了之前常用的Session。
系统采用Redis作为缓存,解决Token过期更新的问题,同时集成SSO登录,完整过程这里来总结一下。... 详情