From 071b19e42e5a11dbff0e4be3c19f277eb02f381d Mon Sep 17 00:00:00 2001 From: En Date: Thu, 26 Mar 2026 16:58:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=90=8E=E7=AB=AF):=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=20JWT=20=E8=BF=87=E6=BB=A4=E5=99=A8=E5=92=8C=20SecurityConfig?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lesingle/edu/common/config/SecurityConfig.java | 6 +++--- .../edu/common/security/JwtAuthenticationFilter.java | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/config/SecurityConfig.java b/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/config/SecurityConfig.java index 2148a13..72add62 100644 --- a/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/config/SecurityConfig.java +++ b/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/config/SecurityConfig.java @@ -1,6 +1,5 @@ package com.lesingle.edu.common.config; -import com.lesingle.edu.common.filter.TraceIdFilter; import com.lesingle.edu.common.security.JwtAuthenticationFilter; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; @@ -31,7 +30,7 @@ import java.util.List; @RequiredArgsConstructor public class SecurityConfig { - private final TraceIdFilter traceIdFilter; + private final JwtAuthenticationFilter jwtAuthenticationFilter; @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { @@ -53,7 +52,8 @@ public class SecurityConfig { // All other requests require authentication .anyRequest().authenticated() ) - .addFilterBefore(traceIdFilter, UsernamePasswordAuthenticationFilter.class); + // 添加 JWT 过滤器到 UsernamePasswordAuthenticationFilter 之前 + .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } diff --git a/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/security/JwtAuthenticationFilter.java b/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/security/JwtAuthenticationFilter.java index d585aff..283b74e 100644 --- a/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/security/JwtAuthenticationFilter.java +++ b/lesingle-edu-reading-platform-backend/src/main/java/com/lesingle/edu/common/security/JwtAuthenticationFilter.java @@ -18,8 +18,6 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -39,7 +37,6 @@ import java.util.Map; @Slf4j @Component @RequiredArgsConstructor -@Order(Ordered.HIGHEST_PRECEDENCE + 10) // 在 TraceIdFilter 之后执行 public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtTokenProvider jwtTokenProvider; @@ -52,13 +49,17 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + log.debug("JwtAuthenticationFilter doFilterInternal called for: {}", request.getRequestURI()); try { String token = resolveToken(request); + log.debug("Token extracted: {}", token != null ? "present" : "null"); if (StringUtils.hasText(token)) { + log.debug("Token validation starting..."); // 验证 token 并获取错误原因 String tokenErrorReason = jwtTokenProvider.validateTokenWithReason(token); if (tokenErrorReason != null) { // token 无效,返回 401 错误 + log.debug("Token validation failed: {}", tokenErrorReason); sendError(response, HttpStatus.UNAUTHORIZED, getErrorMessage(tokenErrorReason)); return; }