为什么我的 RestTemplate ClientHttpRequestInterceptor 没有被调用?
Why is my RestTemplate ClientHttpRequestInterceptor not called?
我想使用拦截器为通过 rest 模板发出的每个请求添加授权 header。我是这样做的:
public FirebaseCloudMessagingRestTemplate(@Autowired RestTemplateBuilder builder, @Value("fcm.server-key") String serverKey) {
builder.additionalInterceptors(new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().add("Authorization", "key=" + serverKey);
System.out.println(request.getHeaders());
return execution.execute(request, body);
}
});
this.restTemplate = builder.build();
}
但是当我这样做时
DownstreamHttpMessageResponse response = restTemplate.postForObject(SEND_ENDPOINT, request, DownstreamHttpMessageResponse.class);
拦截器没有被调用(我在里面放了断点但它没有触发)。发出请求并返回明显丢失的身份验证密钥响应。为什么我的拦截器没有被调用?
好的,我知道发生了什么。在检查 build()
实现后,我发现 RestTemplateBuilder
在调用 additionalInterceptors
时并没有改变自身状态,而是 returns 一个带有给定拦截器的新构建器。链接调用解决了这个问题。
public FirebaseCloudMessagingRestTemplate(final @Autowired RestTemplateBuilder builder, final @Value("${fcm.server-key}") String serverKey) {
this.restTemplate = builder.additionalInterceptors((request, body, execution) -> {
request.getHeaders().add("Authorization", "key=" + serverKey);
log.debug("Adding authorization header");
return execution.execute(request, body);
}).build();
}
我想使用拦截器为通过 rest 模板发出的每个请求添加授权 header。我是这样做的:
public FirebaseCloudMessagingRestTemplate(@Autowired RestTemplateBuilder builder, @Value("fcm.server-key") String serverKey) {
builder.additionalInterceptors(new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().add("Authorization", "key=" + serverKey);
System.out.println(request.getHeaders());
return execution.execute(request, body);
}
});
this.restTemplate = builder.build();
}
但是当我这样做时
DownstreamHttpMessageResponse response = restTemplate.postForObject(SEND_ENDPOINT, request, DownstreamHttpMessageResponse.class);
拦截器没有被调用(我在里面放了断点但它没有触发)。发出请求并返回明显丢失的身份验证密钥响应。为什么我的拦截器没有被调用?
好的,我知道发生了什么。在检查 build()
实现后,我发现 RestTemplateBuilder
在调用 additionalInterceptors
时并没有改变自身状态,而是 returns 一个带有给定拦截器的新构建器。链接调用解决了这个问题。
public FirebaseCloudMessagingRestTemplate(final @Autowired RestTemplateBuilder builder, final @Value("${fcm.server-key}") String serverKey) {
this.restTemplate = builder.additionalInterceptors((request, body, execution) -> {
request.getHeaders().add("Authorization", "key=" + serverKey);
log.debug("Adding authorization header");
return execution.execute(request, body);
}).build();
}