这篇文章来归纳总结一下token刷新的一些业务流程,思路。
在项目中,一般会使用到 jwt+token+redis 的方式来做用户的一个认证。
首先说一下业务流程:
token 认证业务流程
-
用户登录,服务端使用 jwt 根据 userId 为该用户生成 token,服务端将 token 保存在 redis 中。
-
用户携带token访问接口,如果该接口需要token才能访问,那么服务端获取 token,然后去 redis 进行一些查询校验,如果能够通过校验,那么就允许用户访问。
按照这个思路,我们只需要在 LoginInteceptor 拦截器中配置好哪些接口需要被拦截,然后当用户访问需要登录才能访问的接口的时候,再去校验它们的 token 即可,此时是根据该 token 去操作 redis 数据库进行校验的,如果说该 token 有效,那么我们可以给它进行一个刷新过期时间,同时放行用户。
如果用户访问的不是需要登录才能访问的接口的话,就不会被该 LoginInteceptor 拦截器拦截,也就是说服务端没有机会像上面一样操作 token,此时的用户仍然是处于登录状态,我们显然需要更新他的 token,否则用着用着突然说掉登陆了,是个很差的用户体验。
所以我们需要再添加一个 RefreshToken拦截器,业务流程是这样:
token 刷新业务流程
可以看到,我们的服务端要再增加一个 RefreshToken拦截器截器,并且需要用到 ThreadLocal 本地线程来进行逻辑判断。
RefreshToken拦截器截器 拦截的是所有请求,而 LoginInteceptor 拦截器拦截的是那些需要登录才能访问的请求.