前后端基于json进行交互,接口通过JWT无状态token进行权限校验
- 登录时,密码验证通过,取当前时间戳生成签名Token,将用户的基本信息放到分布式缓存中(Redis),将生成的Token放在Response Header的Authorization属性中,同时在缓存中记录值为当前时间戳的RefreshToken,并设置有效期
- 客户端请求每次携带Token进行请求
- 服务端每次校验请求的Token有效后,同时比对Token中的时间戳与分布式缓存中(Redis)的RefreshToken时间戳是否一致,一致则判定Token有效
- 当请求的Token被验证时抛出TokenExpiredException异常时说明Token过期,校验时间戳一致后重新生成Token并调用登录方法
- 每次生成新的Token后,同时要根据新的时间戳更新与分布式缓存中的RefreshToken,以保证两者时间戳一致
采用JWT有效期内刷新Token方案,解决并发请求问题
为避免多个请求同一时间分别生成不同的Token,我们引入redis锁机制。即我们的目的是同一个用户同一时间的不同请求,只允许获得锁的请求进行令牌刷新,其他的请求因为是在令牌有效期因此直接放行