From b7c41327655ab3daf58697ee854f1fd2e01832bf Mon Sep 17 00:00:00 2001 From: PIGCLOUD Date: Thu, 30 Oct 2025 17:25:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(security):=20=E4=BC=98=E5=8C=96Feign=20tok?= =?UTF-8?q?en=E4=BC=A0=E9=80=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构PigxOAuthRequestInterceptor的token获取流程 - 优先从Web请求中解析token,失败后从NonWebTokenContextHolder获取 - 增加Objects.nonNull检查确保request不为空 - 优化token传递逻辑,支持消息队列等非Web场景 --- .../feign/PigxOAuthRequestInterceptor.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxOAuthRequestInterceptor.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxOAuthRequestInterceptor.java index d7f9421dc..35cd240e8 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxOAuthRequestInterceptor.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxOAuthRequestInterceptor.java @@ -7,15 +7,15 @@ import com.pig4cloud.pigx.common.core.util.WebUtils; import com.pig4cloud.pigx.common.security.util.NonWebTokenContextHolder; import feign.RequestInterceptor; import feign.RequestTemplate; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; import org.springframework.security.oauth2.core.OAuth2AccessToken; import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver; -import jakarta.servlet.http.HttpServletRequest; - import java.util.Collection; +import java.util.Objects; /** * oauth2 feign token传递 @@ -48,19 +48,23 @@ public class PigxOAuthRequestInterceptor implements RequestInterceptor { return; } - // 非web 请求直接跳过 - String token = ""; - if (WebUtils.getRequest() == null) { - token = NonWebTokenContextHolder.getToken(); - } else { - HttpServletRequest request = WebUtils.getRequest(); - // 避免请求参数的 query token 无法传递 + String token = null; + HttpServletRequest request = WebUtils.getRequest(); + + // 优先尝试从 Web 请求中解析 token + if (Objects.nonNull(request)) { token = tokenResolver.resolve(request); } + // 如果 request 中没有 token,从 NonWebTokenContextHolder 获取(适配消息队列等非 Web 场景) + if (StrUtil.isBlank(token)) { + token = NonWebTokenContextHolder.getToken(); + } + if (StrUtil.isBlank(token)) { return; } + template.header(HttpHeaders.AUTHORIZATION, String.format("%s %s", OAuth2AccessToken.TokenType.BEARER.getValue(), token));