From 375c18a6d2713ff19b22093eec57315992d8333f Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期四, 06 十一月 2025 13:33:52 +0800
Subject: [PATCH] 增加评审下载
---
backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java | 117 +++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 83 insertions(+), 34 deletions(-)
diff --git a/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java b/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java
index a54103b..0ce0566 100644
--- a/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java
+++ b/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java
@@ -36,18 +36,18 @@
private JwtUtil jwtUtil;
/**
- * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛ID
- * 浠嶫WT token涓В鏋愮敤鎴稩D
+ * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛ID锛堝寘鎷尶鍚嶇敤鎴凤級
+ * 浠嶫WT token涓В鏋愮敤鎴稩D锛屽寘鎷礋鏁扮殑鍖垮悕鐢ㄦ埛ID
*
- * @return 鐢ㄦ埛ID
+ * @return 鐢ㄦ埛ID锛屽寘鎷尶鍚嶇敤鎴风殑璐熸暟ID
*/
- public Long getCurrentUserId() {
+ public Long getCurrentUserIdIncludingAnonymous() {
try {
// 棣栧厛灏濊瘯浠嶩TTP璇锋眰澶翠腑鑾峰彇JWT token
String token = getTokenFromRequest();
if (token != null && jwtUtil.validateToken(token)) {
Long userId = jwtUtil.getUserIdFromToken(token);
- logger.debug("浠嶫WT token涓幏鍙栧埌鐢ㄦ埛ID: {}", userId);
+ logger.debug("浠嶫WT token涓幏鍙栧埌鐢ㄦ埛ID锛堝寘鎷尶鍚嶇敤鎴凤級: {}", userId);
return userId;
}
@@ -59,54 +59,103 @@
// 濡傛灉娌℃湁鏈夋晥鐨凧WT token锛屽皾璇曚粠Spring Security涓婁笅鏂囪幏鍙�
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- if (authentication != null && authentication.isAuthenticated() &&
- !"anonymousUser".equals(authentication.getPrincipal())) {
- logger.debug("鑾峰彇鍒拌璇佺敤鎴�: {}", authentication.getName());
- // 鍦ㄥ紑鍙戠幆澧冧笅锛岃繑鍥炰竴涓湁鏁堢殑璇勫鐢ㄦ埛ID
- // 鏌ユ壘绗竴涓湁鏁堢殑璇勫璁板綍骞惰繑鍥炲叾user_id
- try {
- Optional<Judge> firstValidJudge = judgeRepository.findAll().stream()
- .filter(judge -> judge.getUserId() != null)
- .findFirst();
- if (firstValidJudge.isPresent()) {
- Long userId = firstValidJudge.get().getUserId();
- logger.debug("寮�鍙戠幆澧冿細浣跨敤鏈夋晥璇勫鐢ㄦ埛ID: {}", userId);
+ if (authentication != null && authentication.isAuthenticated()) {
+ String principal = authentication.getName();
+ logger.debug("鑾峰彇鍒拌璇佺敤鎴�: {}", principal);
+
+ // 妫�鏌ユ槸鍚︿负鍖垮悕鐢ㄦ埛
+ if ("anonymousUser".equals(principal)) {
+ logger.debug("妫�娴嬪埌Spring榛樿鍖垮悕鐢ㄦ埛锛岃繑鍥瀗ull");
+ return null;
+ } else if (principal.startsWith("anonymous_")) {
+ // 浠� "anonymous_-833488" 涓彁鍙栫敤鎴稩D
+ try {
+ String userIdStr = principal.substring("anonymous_".length());
+ Long userId = Long.parseLong(userIdStr);
+ logger.debug("浠庡尶鍚嶈璇佷腑瑙f瀽鍒扮敤鎴稩D: {}", userId);
return userId;
+ } catch (NumberFormatException e) {
+ logger.warn("鏃犳硶浠庡尶鍚嶈璇佷俊鎭腑瑙f瀽鐢ㄦ埛ID: {}", principal);
}
- } catch (Exception e) {
- logger.warn("鏌ユ壘璇勫鐢ㄦ埛ID鏃跺彂鐢熷紓甯�: {}", e.getMessage());
}
- // 濡傛灉娌℃湁鎵惧埌鏈夋晥鐨勮瘎濮旓紝杩斿洖鐢ㄦ埛ID=2锛堜粠娴嬭瘯鏁版嵁鐪嬶紝杩欐槸涓�涓湁鏁堢殑璇勫鐢ㄦ埛锛�
- logger.debug("寮�鍙戠幆澧冿細浣跨敤榛樿璇勫鐢ㄦ埛ID: 2");
- return 2L;
+
+ // 浠嶴pring Security涓婁笅鏂囦腑鑾峰彇鐢ㄦ埛ID
+ try {
+ return Long.parseLong(principal);
+ } catch (NumberFormatException e) {
+ logger.warn("鏃犳硶浠庤璇佷俊鎭腑瑙f瀽鐢ㄦ埛ID: {}", principal);
+ }
}
} catch (Exception e) {
logger.warn("鑾峰彇褰撳墠鐢ㄦ埛ID鏃跺彂鐢熷紓甯�: {}", e.getMessage());
}
- // 鍦ㄦ祴璇曠幆澧冩垨寮�鍙戠幆澧冧腑锛屽鏋滄病鏈夎璇佷俊鎭紝杩斿洖涓�涓湁鏁堢殑璇勫鐢ㄦ埛ID
+ // 濡傛灉娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖null
+ logger.debug("娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖null");
+ return null;
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛ID
+ * 浠嶫WT token涓В鏋愮敤鎴稩D
+ *
+ * @return 鐢ㄦ埛ID锛屽鏋滄槸鍖垮悕鐢ㄦ埛鍒欒繑鍥瀗ull
+ */
+ public Long getCurrentUserId() {
try {
- Optional<Judge> firstValidJudge = judgeRepository.findAll().stream()
- .filter(judge -> judge.getUserId() != null)
- .findFirst();
- if (firstValidJudge.isPresent()) {
- Long userId = firstValidJudge.get().getUserId();
- logger.debug("娴嬭瘯/寮�鍙戠幆澧冿細浣跨敤鏈夋晥璇勫鐢ㄦ埛ID: {}", userId);
+ // 棣栧厛灏濊瘯浠嶩TTP璇锋眰澶翠腑鑾峰彇JWT token
+ String token = getTokenFromRequest();
+ if (token != null && jwtUtil.validateToken(token)) {
+ Long userId = jwtUtil.getUserIdFromToken(token);
+ logger.debug("浠嶫WT token涓幏鍙栧埌鐢ㄦ埛ID: {}", userId);
+
+ // 妫�鏌ユ槸鍚︿负鍖垮悕鐢ㄦ埛锛堣礋鏁扮敤鎴稩D锛�
+ if (userId != null && userId < 0) {
+ logger.debug("妫�娴嬪埌鍖垮悕鐢ㄦ埛锛岃繑鍥瀗ull");
+ return null;
+ }
+
return userId;
}
+
+ if (token == null) {
+ logger.debug("鏈兘浠庤姹傚ご鑾峰彇鍒癑WT token");
+ } else {
+ logger.debug("浠庤姹傚ご鑾峰彇鍒皌oken浣嗘牎楠屽け璐�");
+ }
+
+ // 濡傛灉娌℃湁鏈夋晥鐨凧WT token锛屽皾璇曚粠Spring Security涓婁笅鏂囪幏鍙�
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication != null && authentication.isAuthenticated()) {
+ String principal = authentication.getName();
+ logger.debug("鑾峰彇鍒拌璇佺敤鎴�: {}", principal);
+
+ // 妫�鏌ユ槸鍚︿负鍖垮悕鐢ㄦ埛
+ if ("anonymousUser".equals(principal) || principal.startsWith("anonymous_")) {
+ logger.debug("妫�娴嬪埌鍖垮悕鐢ㄦ埛璁よ瘉锛岃繑鍥瀗ull");
+ return null;
+ }
+
+ // 浠嶴pring Security涓婁笅鏂囦腑鑾峰彇鐢ㄦ埛ID
+ try {
+ return Long.parseLong(principal);
+ } catch (NumberFormatException e) {
+ logger.warn("鏃犳硶浠庤璇佷俊鎭腑瑙f瀽鐢ㄦ埛ID: {}", principal);
+ }
+ }
} catch (Exception e) {
- logger.warn("鏌ユ壘璇勫鐢ㄦ埛ID鏃跺彂鐢熷紓甯�: {}", e.getMessage());
+ logger.warn("鑾峰彇褰撳墠鐢ㄦ埛ID鏃跺彂鐢熷紓甯�: {}", e.getMessage());
}
- // 濡傛灉娌℃湁鎵惧埌鏈夋晥鐨勮瘎濮旓紝杩斿洖鐢ㄦ埛ID=2锛堜粠娴嬭瘯鏁版嵁鐪嬶紝杩欐槸涓�涓湁鏁堢殑璇勫鐢ㄦ埛锛�
- logger.debug("娴嬭瘯/寮�鍙戠幆澧冿細浣跨敤榛樿璇勫鐢ㄦ埛ID: 2");
- return 2L;
+ // 濡傛灉娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖null锛堟敮鎸佸尶鍚嶈闂級
+ logger.debug("娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖null锛堝尶鍚嶇敤鎴凤級");
+ return null;
}
/**
* 浠嶩TTP璇锋眰涓幏鍙朖WT token
*/
- private String getTokenFromRequest() {
+ public String getTokenFromRequest() {
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) {
--
Gitblit v1.8.0