String token = JwtUtil.buildJWT(vip.getPhone());
//解决多点登录问题
RBucket<Object> bucket = redisUtil.getBucket(ConfigConstant.SYS_IS_LOGIN + vip.getPhone());
bucket.set(token);
在登录的时候将生成的token,放到redis。使用固定值 + 手机号 作为key,token值作为 值。
// 获得用户信息
String phone = JwtUtil.generateContent(authorization);
Vip user = vipRepository.findByPhone(phone);
if (user == null) {
// 重新登录
throw new LoginException("该接口需要先登录");
}
if(user.getAllowMultiLogin() == 0) {
//不允许多点登录
RBucket<Object> bucket = redisUtil.getBucket(ConfigConstant.SYS_IS_LOGIN+phone);
if(bucket.isExists()) {
String oldToken = (String) bucket.get();
if(!oldToken.equals(authorization)) {
throw new LoginException("账户已在另一处登录");
}
}else {
bucket.set(authorization);
}
}
Environment.setUser(user);
在调用接口校验token 有效性时。使用固定值 + 手机号 取出 redis中 最后用户登录保存的token。如果和现在调用接口用户不一致。则认为原用户已经被挤掉。