feat(auth): AuthUtil 增加 getAdminUserIdOrThrow 和 getMemberUserIdOrThrow

- getAdminUserIdOrThrow: 校验 userType=ADMIN,否则返回 403
- getMemberUserIdOrThrow: 校验 userType=MEMBER,否则返回 403
- 保留 getMemberIdOrThrow 向后兼容
This commit is contained in:
张翔
2026-06-03 11:29:47 +08:00
parent 5c5bc6419a
commit 9753d7ebf5
@@ -29,4 +29,38 @@ public class AuthUtil {
if (jwtTokenProvider.getUserIdFromToken(token) <= 0L) throw new IllegalArgumentException("ID无效");
return jwtTokenProvider.getUserIdFromToken(token);
}
}
/**
* 获取当前 ADMIN 用户 ID,校验 userType 必须为 ADMIN
*/
public Long getAdminUserIdOrThrow(ServerRequest request) {
String token = extractToken(request);
if (token == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "缺少 Token");
if (!jwtTokenProvider.validateToken(token)) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Token 无效或已过期");
String userType = jwtTokenProvider.getUserTypeFromToken(token);
if (!"ADMIN".equals(userType)) {
log.warn("非管理员用户尝试访问管理端接口, userType={}", userType);
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "无权访问管理端接口");
}
Long userId = jwtTokenProvider.getUserIdFromToken(token);
if (userId <= 0L) throw new IllegalArgumentException("ID无效");
return userId;
}
/**
* 获取当前 MEMBER 用户 ID,校验 userType 必须为 MEMBER
*/
public Long getMemberUserIdOrThrow(ServerRequest request) {
String token = extractToken(request);
if (token == null) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "缺少 Token");
if (!jwtTokenProvider.validateToken(token)) throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Token 无效或已过期");
String userType = jwtTokenProvider.getUserTypeFromToken(token);
if (!"MEMBER".equals(userType)) {
log.warn("非会员用户尝试访问会员接口, userType={}", userType);
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "无权访问会员接口");
}
Long userId = jwtTokenProvider.getUserIdFromToken(token);
if (userId <= 0L) throw new IllegalArgumentException("ID无效");
return userId;
}
}