| | |
| | | * 从JWT token中解析用户ID |
| | | * |
| | | * @return 用户ID |
| | | * @throws SecurityException 当没有有效认证时抛出 |
| | | */ |
| | | public Long getCurrentUserId() { |
| | | try { |
| | |
| | | if (authentication != null && authentication.isAuthenticated() && |
| | | !"anonymousUser".equals(authentication.getPrincipal())) { |
| | | logger.debug("获取到认证用户: {}", authentication.getName()); |
| | | // 在开发环境下,返回一个有效的评委用户ID |
| | | // 查找第一个有效的评委记录并返回其user_id |
| | | // 从Spring Security上下文中获取用户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); |
| | | return userId; |
| | | } |
| | | } catch (Exception e) { |
| | | logger.warn("查找评委用户ID时发生异常: {}", e.getMessage()); |
| | | return Long.parseLong(authentication.getName()); |
| | | } catch (NumberFormatException e) { |
| | | logger.warn("无法从认证信息中解析用户ID: {}", authentication.getName()); |
| | | } |
| | | // 如果没有找到评委,返回固定用户ID |
| | | return 1L; |
| | | } |
| | | } catch (Exception e) { |
| | | logger.warn("获取当前用户ID时发生异常: {}", e.getMessage()); |
| | | } |
| | | |
| | | // 如果没有认证信息,返回null表示未登录 |
| | | logger.debug("未找到有效的认证信息"); |
| | | return null; |
| | | // 如果没有有效的认证信息,抛出权限异常 |
| | | logger.warn("没有有效的认证信息,拒绝访问"); |
| | | throw new SecurityException("没有权限"); |
| | | } |
| | | |
| | | /** |