feat(user): 添加用户缓存更新功能
- 在用户信息更新后判断是否为当前登录用户并更新缓存 - 实现updateUserCache方法同步Redis中的LoginUser信息 - 添加token验证确保只更新当前用户的缓存 - 避免密码信息泄露通过设置pwd为null - 添加异常处理和日志记录确保缓存更新稳定性
This commit is contained in:
parent
44c04f81e2
commit
bd252efd20
|
|
@ -235,6 +235,12 @@ public class SysUserServiceImpl implements SysUserService {
|
|||
|
||||
// 执行更新
|
||||
sysUserMapper.update(sysUser);
|
||||
|
||||
// 判断更新的用户是否是当前登录用户,如果是则更新用户缓存
|
||||
Long currentUserId = loginUserCacheUtil.getCurrentUserId();
|
||||
if (currentUserId != null && currentUserId.equals(sysUserUpdateDto.getUserId())) {
|
||||
updateUserCache(currentUserId, sysUser);
|
||||
}
|
||||
}else {
|
||||
// 如果没有用户ID,创建新用户
|
||||
SysUser sysUser = new SysUser();
|
||||
|
|
@ -1032,4 +1038,48 @@ public class SysUserServiceImpl implements SysUserService {
|
|||
|
||||
return sessionDto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户缓存(参照 currentUser 方法的逻辑)
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @param updatedUser 更新后的用户信息
|
||||
*/
|
||||
private void updateUserCache(Long userId, SysUser updatedUser) {
|
||||
try {
|
||||
// 获取当前登录用户的 token
|
||||
String token = loginUserCacheUtil.getTokenFromRequest();
|
||||
if (token == null || token.isEmpty()) {
|
||||
log.warn("无法获取当前用户的 token,跳过缓存更新");
|
||||
return;
|
||||
}
|
||||
|
||||
// 从 Redis 中获取 LoginUser 对象
|
||||
String loginUserJson = (String) redissonClient.getBucket("loginUser:" + token).get();
|
||||
if (loginUserJson == null || loginUserJson.isEmpty()) {
|
||||
log.warn("Redis 中未找到 LoginUser 缓存,token: {}", token);
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析 JSON 字符串为 LoginUser 对象
|
||||
LoginUser loginUser = cn.hutool.json.JSONUtil.toBean(loginUserJson, LoginUser.class);
|
||||
|
||||
// 验证是否是当前用户
|
||||
if (loginUser != null && loginUser.getUserInfo() != null &&
|
||||
loginUser.getUserInfo().getUserId().equals(userId)) {
|
||||
|
||||
// 更新用户信息(密码设置为 null,不暴露给前端)
|
||||
updatedUser.setPwd(null);
|
||||
loginUser.setUserInfo(updatedUser);
|
||||
|
||||
// 将更新后的 LoginUser 写回 Redis
|
||||
redissonClient.getBucket("loginUser:" + token)
|
||||
.set(cn.hutool.json.JSONUtil.toJsonStr(loginUser));
|
||||
|
||||
log.info("已更新用户 {} 的缓存信息", userId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("更新用户缓存失败:{}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue