From afeeed281e60466b576fbe74d339634cc5d07b82 Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期三, 08 十月 2025 08:56:42 +0800
Subject: [PATCH] 修复评审功能和用户认证问题

---
 backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java |  110 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 88 insertions(+), 22 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 7ab37f2..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,37 +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> firstJudge = judgeRepository.findAll().stream().findFirst();
-                    if (firstJudge.isPresent() && firstJudge.get().getUserId() != null) {
-                        Long userId = firstJudge.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());
                 }
-                // 濡傛灉娌℃湁鎵惧埌璇勫锛岃繑鍥炲浐瀹氱敤鎴稩D
-                return 1L;
+                
+                // 浠嶴pring Security涓婁笅鏂囦腑鑾峰彇鐢ㄦ埛ID
+                try {
+                    return Long.parseLong(principal);
+                } catch (NumberFormatException e) {
+                    logger.warn("鏃犳硶浠庤璇佷俊鎭腑瑙f瀽鐢ㄦ埛ID: {}", principal);
+                }
             }
         } catch (Exception e) {
             logger.warn("鑾峰彇褰撳墠鐢ㄦ埛ID鏃跺彂鐢熷紓甯�: {}", e.getMessage());
         }
         
-        // 濡傛灉娌℃湁璁よ瘉淇℃伅锛岃繑鍥瀗ull琛ㄧず鏈櫥褰�
-        logger.debug("鏈壘鍒版湁鏁堢殑璁よ瘉淇℃伅");
+        // 濡傛灉娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖null
+        logger.debug("娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖null");
+        return null;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛ID
+     * 浠嶫WT token涓В鏋愮敤鎴稩D
+     * 
+     * @return 鐢ㄦ埛ID锛屽鏋滄槸鍖垮悕鐢ㄦ埛鍒欒繑鍥瀗ull
+     */
+    public Long getCurrentUserId() {
+        try {
+            // 棣栧厛灏濊瘯浠嶩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());
+        }
+        
+        // 濡傛灉娌℃湁鏈夋晥鐨勮璇佷俊鎭紝杩斿洖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