|
@@ -94,12 +94,11 @@ public class AuthService {
|
|
|
response.setNewUser(isNewUser);
|
|
response.setNewUser(isNewUser);
|
|
|
|
|
|
|
|
// 记录审计日志
|
|
// 记录审计日志
|
|
|
- String roleCode = user.getRole() != null ? user.getRole().getCode() : "USER";
|
|
|
|
|
if (isNewUser) {
|
|
if (isNewUser) {
|
|
|
- auditLogService.logSuccess(user.getId(), user.getNickname(), roleCode,
|
|
|
|
|
|
|
+ auditLogService.logSuccess(user.getId(), user.getNickname(), "USER",
|
|
|
OperationType.USER_REGISTER, "USER:" + user.getId(), user.getId());
|
|
OperationType.USER_REGISTER, "USER:" + user.getId(), user.getId());
|
|
|
}
|
|
}
|
|
|
- auditLogService.logSuccess(user.getId(), user.getNickname(), roleCode,
|
|
|
|
|
|
|
+ auditLogService.logSuccess(user.getId(), user.getNickname(), "USER",
|
|
|
OperationType.USER_LOGIN, "USER:" + user.getId(), user.getId());
|
|
OperationType.USER_LOGIN, "USER:" + user.getId(), user.getId());
|
|
|
return response;
|
|
return response;
|
|
|
}
|
|
}
|
|
@@ -298,7 +297,7 @@ public class AuthService {
|
|
|
// 只查 Refresh Token 校验所需的字段,减少DB开销
|
|
// 只查 Refresh Token 校验所需的字段,减少DB开销
|
|
|
User user = userMapper.selectOne(
|
|
User user = userMapper.selectOne(
|
|
|
new LambdaQueryWrapper<User>()
|
|
new LambdaQueryWrapper<User>()
|
|
|
- .select(User::getId, User::getPhone, User::getRole,
|
|
|
|
|
|
|
+ .select(User::getId, User::getPhone,
|
|
|
User::getTokenVersion, User::getRefreshTokenHash,
|
|
User::getTokenVersion, User::getRefreshTokenHash,
|
|
|
User::getRefreshTokenStatus, User::getStatus)
|
|
User::getRefreshTokenStatus, User::getStatus)
|
|
|
.eq(User::getId, userId));
|
|
.eq(User::getId, userId));
|
|
@@ -331,7 +330,7 @@ public class AuthService {
|
|
|
|
|
|
|
|
// 5. 旋转:标记旧 Refresh Token 为 USED,签发新的一对
|
|
// 5. 旋转:标记旧 Refresh Token 为 USED,签发新的一对
|
|
|
user.setRefreshTokenStatus("USED");
|
|
user.setRefreshTokenStatus("USED");
|
|
|
- String roleCode = user.getRole() != null ? user.getRole().getCode() : "USER";
|
|
|
|
|
|
|
+ String roleCode = "USER";
|
|
|
long currentVersion = user.getTokenVersion() != null ? user.getTokenVersion() : 0L;
|
|
long currentVersion = user.getTokenVersion() != null ? user.getTokenVersion() : 0L;
|
|
|
|
|
|
|
|
String newAccessToken = jwtUtil.generateAccessToken(
|
|
String newAccessToken = jwtUtil.generateAccessToken(
|
|
@@ -363,17 +362,11 @@ public class AuthService {
|
|
|
// 登录/注册时注入 MDC uid,不依赖 token 解析
|
|
// 登录/注册时注入 MDC uid,不依赖 token 解析
|
|
|
MDC.put("uid", String.valueOf(user.getId()));
|
|
MDC.put("uid", String.valueOf(user.getId()));
|
|
|
|
|
|
|
|
- String roleCode = user.getRole() != null ? user.getRole().getCode() : "USER";
|
|
|
|
|
|
|
+ String roleCode = "USER";
|
|
|
|
|
|
|
|
// 检测是否存在旧会话
|
|
// 检测是否存在旧会话
|
|
|
long oldVersion = user.getTokenVersion() != null ? user.getTokenVersion() : 0L;
|
|
long oldVersion = user.getTokenVersion() != null ? user.getTokenVersion() : 0L;
|
|
|
- boolean hadPreviousSession;
|
|
|
|
|
- if ("ADMIN".equals(roleCode) || "SUPER_ADMIN".equals(roleCode)) {
|
|
|
|
|
- // 管理员允许多设备:仅当旧版本号 ≥ 5 时说明有其他设备被挤出
|
|
|
|
|
- hadPreviousSession = oldVersion >= 5;
|
|
|
|
|
- } else {
|
|
|
|
|
- hadPreviousSession = oldVersion > 0;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ boolean hadPreviousSession = oldVersion > 0;
|
|
|
|
|
|
|
|
// 递增 tokenVersion,使所有旧 Token 立即失效
|
|
// 递增 tokenVersion,使所有旧 Token 立即失效
|
|
|
long newVersion = oldVersion + 1;
|
|
long newVersion = oldVersion + 1;
|
|
@@ -381,7 +374,7 @@ public class AuthService {
|
|
|
|
|
|
|
|
// 生成 Token
|
|
// 生成 Token
|
|
|
String accessToken = jwtUtil.generateAccessToken(
|
|
String accessToken = jwtUtil.generateAccessToken(
|
|
|
- user.getId(), roleCode, newVersion);
|
|
|
|
|
|
|
+ user.getId(), "USER", newVersion);
|
|
|
String refreshToken = jwtUtil.generateRefreshToken(user.getId());
|
|
String refreshToken = jwtUtil.generateRefreshToken(user.getId());
|
|
|
|
|
|
|
|
// 存储 Refresh Token 哈希(用于旋转+重用检测)
|
|
// 存储 Refresh Token 哈希(用于旋转+重用检测)
|
|
@@ -442,7 +435,7 @@ public class AuthService {
|
|
|
.province(user.getProvince())
|
|
.province(user.getProvince())
|
|
|
.city(user.getCity())
|
|
.city(user.getCity())
|
|
|
.district(user.getDistrict())
|
|
.district(user.getDistrict())
|
|
|
- .role(user.getRole() != null ? user.getRole().getCode() : "USER")
|
|
|
|
|
|
|
+ .role("USER")
|
|
|
.membershipLevel(levelInfo != null ? levelInfo.getLevelCode() : "PLUS")
|
|
.membershipLevel(levelInfo != null ? levelInfo.getLevelCode() : "PLUS")
|
|
|
.membershipLevelName(levelInfo != null ? levelInfo.getLevelName() : "普通会员")
|
|
.membershipLevelName(levelInfo != null ? levelInfo.getLevelName() : "普通会员")
|
|
|
.inviterId(inviterId)
|
|
.inviterId(inviterId)
|
|
@@ -501,8 +494,7 @@ public class AuthService {
|
|
|
|
|
|
|
|
// 6. 生成Token
|
|
// 6. 生成Token
|
|
|
LoginResponse response = buildLoginResponse(user);
|
|
LoginResponse response = buildLoginResponse(user);
|
|
|
- String roleCode = user.getRole() != null ? user.getRole().getCode() : "USER";
|
|
|
|
|
- auditLogService.logSuccess(user.getId(), user.getNickname(), roleCode,
|
|
|
|
|
|
|
+ auditLogService.logSuccess(user.getId(), user.getNickname(), "USER",
|
|
|
OperationType.USER_LOGIN, "USER:" + user.getId(), user.getId());
|
|
OperationType.USER_LOGIN, "USER:" + user.getId(), user.getId());
|
|
|
return response;
|
|
return response;
|
|
|
}
|
|
}
|
|
@@ -530,9 +522,8 @@ public class AuthService {
|
|
|
user.setPassword(passwordUtil.encode(request.getNewPassword()));
|
|
user.setPassword(passwordUtil.encode(request.getNewPassword()));
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
log.info("用户{}设置/修改密码成功", userId);
|
|
log.info("用户{}设置/修改密码成功", userId);
|
|
|
- String roleCode = user.getRole() != null ? user.getRole().getCode() : "USER";
|
|
|
|
|
- auditLogService.logSuccess(userId, user.getNickname(), roleCode,
|
|
|
|
|
- OperationType.USER_UPDATE, "PASSWORD:" + userId, userId);
|
|
|
|
|
|
|
+ auditLogService.logSuccess(userId, user.getNickname(), "USER",
|
|
|
|
|
+ OperationType.USER_UPDATE, "PHONE:" + userId, userId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -560,8 +551,7 @@ public class AuthService {
|
|
|
user.setPhone(request.getNewPhone());
|
|
user.setPhone(request.getNewPhone());
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
log.info("用户{}修改手机号成功,旧手机号:{},新手机号:{}", userId, oldPhone, request.getNewPhone());
|
|
log.info("用户{}修改手机号成功,旧手机号:{},新手机号:{}", userId, oldPhone, request.getNewPhone());
|
|
|
- String roleCode = user.getRole() != null ? user.getRole().getCode() : "USER";
|
|
|
|
|
- auditLogService.logSuccess(userId, user.getNickname(), roleCode,
|
|
|
|
|
|
|
+ auditLogService.logSuccess(userId, user.getNickname(), "USER",
|
|
|
OperationType.USER_UPDATE, "PHONE:" + userId, userId);
|
|
OperationType.USER_UPDATE, "PHONE:" + userId, userId);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|