问题复现
- 项目中使用了app+ pc+ 小程序,当用户同时登录app+pc时 其中一端会被挤下线。

出现原因
- 我们使用的是redis存储token,由于redis生token算法原因,多端登录返回同一个token,导致另外一端被挤下线,出现文章开头的情况。
- 下图就是security基于redis生成token的方式


- 可见:extractKey方法中使用values去生成token,多端登录参数进入values都一样
- 所以我们只需要重写token生成规则即可。
解决方式:重写token生成规则
- 加入登录端标识,每个端登录都需要传不一样的标识,比如:app:1,pc:2
- 这样不同端生成token不一样不会相互影响
/**
* @ClassName: CustomAuthenticationKeyGenerator
* @Description: 自定义token生成规则
* @author: ruyi
* @date: 2022/2/28 19:25
*/
public class CustomAuthenticationKeyGenerator extends DefaultAuthenticationKeyGenerator {
private static final String SCOPE = "scope";
private static final String USERNAME =