mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
feat(security): 优化Feign token传递逻辑
- 重构PigxOAuthRequestInterceptor的token获取流程 - 优先从Web请求中解析token,失败后从NonWebTokenContextHolder获取 - 增加Objects.nonNull检查确保request不为空 - 优化token传递逻辑,支持消息队列等非Web场景
This commit is contained in:
1 parent
74110199e2
commit
b7c4132765
1 file changed
+13
-9
+13
-9
@@ -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));
|
||||
|
||||
|
||||
Reference in new issue
Block a user