spring securiy feign接口token更换

  1. RequestInterceptor 请求过滤器
    feign.SynchronousMethodHandler#targetRequest
    image

  2. 添加过滤器

@ConditionalOnBean({OAuth2ClientContext.class})
public class FeignClientTokenRelayInterceptor extends OAuth2FeignRequestInterceptor {
    private static final Logger log = LogManager.getLogger(FeignClientTokenRelayInterceptor.class);
    private final OAuth2ClientContext oAuth2ClientContext;
    private final AccessTokenContextRelay accessTokenContextRelay;

    public FeignClientTokenRelayInterceptor(OAuth2ClientContext oAuth2ClientContext, OAuth2ProtectedResourceDetails resource, AccessTokenContextRelay accessTokenContextRelay) {
        super(oAuth2ClientContext, resource);
        this.oAuth2ClientContext = oAuth2ClientContext;
        this.accessTokenContextRelay = accessTokenContextRelay;
    }

    public void apply(RequestTemplate template) {
        System.out.println(template);
        this.accessTokenContextRelay.copyToken();

        handleCiticMarketToken(template);
        if (this.oAuth2ClientContext != null && this.oAuth2ClientContext.getAccessToken() != null) {
            super.apply(template);
        }

    }

    private void handleCiticMarketToken(RequestTemplate template) {
        Object userNo = ThreadLocalContext.get("userNo");
        Object requestType = ThreadLocalContext.get("requestType");
        if ("citicMarket".equals(requestType) && userNo instanceof String) {
            String userNoStr = userNo.toString();
            if (StringUtil.isEmpty(userNoStr)) {
                return;
            }
            System.out.println(userNo);
            String token = RequestHeaderUtil.getToken(userNoStr);
            if (StringUtil.isEmpty(token)) {
                return;
            }
            System.out.println(token);
            template.header("Authorization", "Bearer " + token);
            template.removeHeader("Authorization");
        }
    }
}
posted @ 2025-07-11 10:44  fight139  阅读(6)  评论(0)    收藏  举报