From a5f3f1c863c89fb559f700f550a39ab95de9ae95 Mon Sep 17 00:00:00 2001 From: gitee Date: Thu, 31 Jul 2025 15:01:03 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E6=9D=83=E9=99=90=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E9=80=BB=E8=BE=91=EF=BC=8C=E5=9C=A8=E7=99=BD=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E4=B8=AD=E7=9A=84url=E4=B9=9F=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E5=9C=A8context=E4=B8=AD=E5=AD=98=E5=85=A5=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/JwtAuthenticationFilter.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/supervision/filter/JwtAuthenticationFilter.java b/src/main/java/com/supervision/filter/JwtAuthenticationFilter.java index 0e3e03c..478cbba 100644 --- a/src/main/java/com/supervision/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/supervision/filter/JwtAuthenticationFilter.java @@ -39,10 +39,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { @NonNull FilterChain filterChain) throws ServletException, IOException { // 1. 检查是否在白名单中 - if (isPermitAllRequest(request)) { - filterChain.doFilter(request, response); - return; - } + boolean permitAllRequest = isPermitAllRequest(request); + // 获取 Authorization 头 String authHeader = request.getHeader("Authorization"); // 提取 token(去掉 "Bearer " 前缀) @@ -53,6 +51,10 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { try { username = jwtUtils.getUsernameFromToken(token); } catch (Exception e) { + if (permitAllRequest) { + filterChain.doFilter(request, response); + return; + } writeTokenErrorResponse(response, "Token 无效或已过期,请重新登录"); return; // 中断 } @@ -77,22 +79,37 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { filterChain.doFilter(request, response); return; } else { + if (permitAllRequest) { + filterChain.doFilter(request, response); + return; + } // Token 已过期 writeTokenErrorResponse(response, "Token 已过期,请重新登录"); return; } } catch (UsernameNotFoundException e) { + if (permitAllRequest) { + filterChain.doFilter(request, response); + return; + } // 用户不存在 writeTokenErrorResponse(response, "用户不存在或已被删除"); return; } catch (Exception e) { + if (permitAllRequest) { + filterChain.doFilter(request, response); + return; + } // 其他加载异常 writeTokenErrorResponse(response, "用户信息加载失败:" + e.getMessage()); return; } } - + if (permitAllRequest) { + filterChain.doFilter(request, response); + return; + } // 特殊情况兜底:比如 token 解析成功但 userDetails 为 null,或已认证但不符合预期 // 根据你的“核心逻辑”,只要没成功放行,就视为失败 writeTokenErrorResponse(response, "认证失败,请重新登录");