2017-10-20 1 views
0

나머지 서식 파일을 통해 만들어진 모든 요청에 ​​인증 헤더를 추가하기 위해 인터셉터를 사용하고 싶습니다. 나는 이런 식으로 일을하고있다 :RestTemplate ClientHttpRequestInterceptor가 호출되지 않는 이유는 무엇입니까?

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); 

인터셉터가 호출되지 않습니다 할 그러나 때 (IV는 거기에 중단 점을 넣고는 발생하지 않았다). 요청이 이루어지고 명백한 누락 된 인증 키 응답이 반환됩니다. 인터셉터가 왜 호출되지 않습니까?

답변

0

좋아요. 무슨 일이 일어 났는지 압니다. build() 구현을 확인한 후에 은 additionalInterceptors을 호출 할 때 자체 상태를 변경하지 않지만 주어진 인터셉터를 가진 새로운 빌더를 반환한다는 것을 발견했습니다. 통화를 연결하면 문제가 해결됩니다.

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(); 
} 
관련 문제