fix(auth): 修复用户登录时旧token清理逻辑

- 在用户登录时检查并使旧token失效的逻辑中添加异常处理
- 为Redis操作和Sa-Token操作分别添加try-catch异常捕获
- 增加详细的日志记录来跟踪token清理过程
- 统一中文化日志信息中的token相关术语
- 确保即使在操作失败时也能继续执行后续清理步骤
This commit is contained in:
wangzhiwei 2026-04-07 14:13:16 +08:00
parent e2fa8d7517
commit 44c04f81e2
1 changed files with 36 additions and 14 deletions

View File

@ -282,16 +282,27 @@ public class SysUserServiceImpl implements SysUserService {
// 密码验证
validatePassword(loginDto.getPassword(), sysUser);
// 检查用户是否已有token如果有则使旧token失效
// 检查用户是否已有 token如果有则使旧 token 失效
String oldToken = CacheManager.getTokenFromCache(sysUser.getUserName());
if (oldToken != null && !oldToken.isEmpty()) {
// 从Redis中删除旧token对应的登录信息
redissonClient.getBucket("loginUser:" + oldToken).delete();
// 使旧token失效
cn.dev33.satoken.stp.StpUtil.logoutByTokenValue(oldToken);
// 从缓存中移除旧token
log.info("检测到用户 {} 已有旧 token: {}", sysUser.getUserName(), oldToken);
// Redis 中删除旧 token 对应的登录信息
try {
redissonClient.getBucket("loginUser:" + oldToken).delete();
log.info("已删除 Redis 中的旧 token 数据:{}", oldToken);
} catch (Exception e) {
log.error("删除 Redis 中的旧 token 失败:{}", e.getMessage());
}
// 使旧 token 失效Sa-Token 内部操作
try {
cn.dev33.satoken.stp.StpUtil.logoutByTokenValue(oldToken);
log.info("已通过 Sa-Token 使旧 token 失效:{}", oldToken);
} catch (Exception e) {
log.error("Sa-Token 使旧 token 失效失败:{}", e.getMessage());
}
// 从缓存中移除旧 token
CacheManager.removeTokenFromCache(sysUser.getUserName());
log.info("用户:{}的旧token已失效", sysUser.getUserName());
log.info("用户:{}的旧 token 完全失效", sysUser.getUserName());
}
// 查询用户角色列表
@ -843,16 +854,27 @@ public class SysUserServiceImpl implements SysUserService {
sysUser = createUserByPhone(phone);
}
// 检查用户是否已有token如果有则使旧token失效
// 检查用户是否已有 token如果有则使旧 token 失效
String oldToken = CacheManager.getTokenFromCache(sysUser.getUserName());
if (oldToken != null && !oldToken.isEmpty()) {
// 从Redis中删除旧token对应的登录信息
redissonClient.getBucket("loginUser:" + oldToken).delete();
// 使旧token失效
cn.dev33.satoken.stp.StpUtil.logoutByTokenValue(oldToken);
// 从缓存中移除旧token
log.info("检测到用户 {} 已有旧 token: {}", sysUser.getUserName(), oldToken);
// Redis 中删除旧 token 对应的登录信息
try {
redissonClient.getBucket("loginUser:" + oldToken).delete();
log.info("已删除 Redis 中的旧 token 数据:{}", oldToken);
} catch (Exception e) {
log.error("删除 Redis 中的旧 token 失败:{}", e.getMessage());
}
// 使旧 token 失效Sa-Token 内部操作
try {
cn.dev33.satoken.stp.StpUtil.logoutByTokenValue(oldToken);
log.info("已通过 Sa-Token 使旧 token 失效:{}", oldToken);
} catch (Exception e) {
log.error("Sa-Token 使旧 token 失效失败:{}", e.getMessage());
}
// 从缓存中移除旧 token
CacheManager.removeTokenFromCache(sysUser.getUserName());
log.info("用户:{}的旧token已失效", sysUser.getUserName());
log.info("用户:{}的旧 token 完全失效", sysUser.getUserName());
}
// 查询用户角色列表