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