Spring Rest模板覆盖Authorization标头值

时间:2019-02-26 07:39:03

标签: java rest spring-boot spring-web

我正在像下面那样打个电话:

REST_TEMPLATE.exchange(
        external_rest_url,
        HttpMethod.POST,
        new HttpEntity<>(dto, getHeaders()),
        Map.class)

和我的标题如下:

private HttpHeaders getHeaders() {
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("User-Agent","Spring's RestTemplate");
    headers.set(HttpHeaders.AUTHORIZATION, "some value");
    return headers;
}

当我运行代码时,标头HttpHeaders.AUTHORIZATION被未定义替换

请参阅以下网络日志中快照中的请求标头: enter image description here

有人知道春天为什么会像这样或特别是spring-web:5.0.5罐子。我也尝试过更改jar的版本,但是结果是相同的。

我使用的Springboot版本是2.0.x

1 个答案:

答案 0 :(得分:1)

如果您需要向所有请求添加相同的标头,则可以将拦截器添加到RestTemplate中:

public void sampleHeader(final RestTemplate restTemplate){
    //Add a ClientHttpRequestInterceptor to the RestTemplate
    restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor(){
        @Override
        public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
            request.getHeaders().set(HttpHeaders.AUTHORIZATION, "some value");//Set the header for each request
            return execution.execute(request, body);
        }
    }); 
}