2017-10-20 5 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()の実装を確認した後、私はRestTemplateBuilderadditionalInterceptorsを呼び出すときに自己状態を変更していないことを発見しましたが、指定されたインターセプタで新しいビルダーを返します。電話をかけて問題を解決します。

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(); 
} 
関連する問題