You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot微服务间如何通过RestTemplate传递JWT Token?

在Posts服务中通过RestTemplate向Media服务传递Token的解决方案

方法1:手动在请求中添加Token请求头

直接从当前请求上下文提取Token,构建请求头后发起调用,适合单次或少量调用场景:

// 从当前请求中获取Authorization头的Token
String token = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest()
                .getHeader("Authorization");

// 构建携带Token的请求头
HttpHeaders headers = new HttpHeaders();
if (token != null) {
    headers.set("Authorization", token);
}

HttpEntity<Void> requestEntity = new HttpEntity<>(headers);

// 调用Media服务接口
ResponseEntity<MediaResponse> response = restTemplate.exchange(
        "http://media-service/api/media",
        HttpMethod.GET,
        requestEntity,
        MediaResponse.class
);

方法2:自定义拦截器实现Token自动传递

如果Posts服务多处需要调用Media服务,推荐用拦截器统一处理Token传递,避免重复代码:

  1. 实现ClientHttpRequestInterceptor接口:
public class TokenRelayInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        // 从当前请求上下文提取Token
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            String token = attributes.getRequest().getHeader("Authorization");
            if (token != null) {
                request.getHeaders().set("Authorization", token);
            }
        }
        return execution.execute(request, body);
    }
}
  1. 配置RestTemplate时注入拦截器:
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getInterceptors().add(new TokenRelayInterceptor());
        return restTemplate;
    }
}

之后所有通过该RestTemplate发起的请求,都会自动携带当前请求的Token。

关键注意点

  • 异步调用场景下,RequestContextHolder默认无法获取请求上下文,需要手动通过RequestContextHolder.setRequestAttributes()传递上下文。
  • 如果Token存储在其他请求头(如X-Auth-Token),需同步修改代码中的头名称。
  • 要添加空值判断,避免因Token不存在导致空指针异常。

内容的提问来源于stack exchange,提问作者Akheel Pasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:45:41