ClientHttpRequestInterceptor не вызывается в Springboot - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь добавить запись в приложение, используя ClientHttpRequestInterceptor. Мой перехватчик не вызывается.Не уверен, что здесь не так -

Вот мой код -

    @Component
    @Slf4j
    public final class RestTemplateInterceptor implements ClientHttpRequestInterceptor {


      protected static final LoggingAspect aspect = new LoggingAspect();
      private final RequestContext requestContext;
      private boolean logResponseBody = true;


      public RestTemplateInterceptor(RequestContext requestContext) {
        this.requestContext = requestContext;
      }


      @Override
      public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
        populateHeader(request);
        traceRequest(request, body);
        ClientHttpResponse response = clientHttpRequestExecution.execute(request,body);
        traceResponse(response);
        return response;
      }


      private void populateHeader(HttpRequest request) {
        final HttpHeaders headers = request.getHeaders();

        // Propagate TAM headers
        headers.add("iv-user", requestContext.getUser());
        headers.add("MessageId", requestContext.getMessageId());
        headers.add("CorrelationId", requestContext.getConversationId());
        headers.add("BusinessId", requestContext.getBusinessId());
        headers.add("ApplicationName", requestContext.getSourceSystem());
        headers.add("iv-groups", requestContext.getGroups());
        headers.add("MessageDateTime", requestContext.getSourceTimestamp());
    }
...................

Вот мой конфигурационный файл

@Configuration
public class RestTemplateConfig {
  /**
   * initialise restTemplate
   *
   * @param restTemplateInterceptor autowired in RestTemplateInterceptor
   * @return
   */
  @Bean
  public RestTemplate restTemplate(ClientHttpRequestInterceptor restTemplateInterceptor, ObjectMapper objectMapper) {

    RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));

    List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
    if (CollectionUtils.isEmpty(interceptors)) {
      interceptors = new ArrayList<>();
    }

    interceptors.add(restTemplateInterceptor);
    restTemplate.setInterceptors(interceptors);
    return restTemplate;
  }
}

Вот мой файл WebMVC

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  @Bean
  public WebMvcConfigurer webAuthentication() {
    return new WebMvcConfigurer() {
      @Override
      public void addInterceptors(InterceptorRegistry registry) {
        //registry.addInterceptor(myInterceptor());
        registry.addInterceptor(new MVCLoggingInterceptor()).addPathPatterns("/api/**");
        registry.addInterceptor(new WebAuthentication()).addPathPatterns("/api/**/");
      }
    };
  }


}

Вот файл моего приложения

@EnableAsync
@EnableScheduling
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })

public class XManagementApplication {

  public static void main(String[] args) {
    SpringApplication.run(XManagementApplication.class, args);
  }
}

Кто-нибудь может сказать, почему мой класс-перехватчик не вызывается, когда я пытаюсь вызвать любой API

Любая помощь будет признательна?

1 Ответ

0 голосов
/ 18 марта 2019
  1. Я не очень понимаю, почему вы хотите создать экземпляр RestTemplateInterceptor в виде Бина.Почему бы просто не создать экземпляр вашего перехватчика внутри метода RestTemplateConfig.restTemplate ()?

    @ Конфигурация открытый класс RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
    
        List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
        if (CollectionUtils.isEmpty(interceptors)) {
            interceptors = new ArrayList<>();
        }
    
        interceptors.add(new RestTemplateInterceptor());
        restTemplate.setInterceptors(interceptors);
        return restTemplate;
    }
    

    }

  2. Кстати, зачем вам передавать RequestContext в конструктор вашего перехватчика?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...