FeignClient передает заголовки - PullRequest
0 голосов
/ 25 октября 2019

У меня около 10 микросервисов, все построены с использованием Spring boot 2 с использованием Eureka и FeignClients. Мои микросервисы используют определенные значения заголовков для отслеживания данных, поэтому при использовании FeignClient необходимо передавать определенные значения, которые находятся во входящем запросе. Поэтому, если Microservice 1 выполняет вызов Microservice 2, он должен передавать заголовки из входящего запроса на microservice 2. Я не смог выяснить, как я могу это сделать. Я понимаю, что это @Header, но если у вас есть 20 FeignClients, вам не нужно вручную добавлять @header ко всем FeignClients. Можете ли вы указать, что FeignClients должен прочитать определенный заголовок из входящего запроса и передать его в FeignClient?

1 Ответ

1 голос
/ 25 октября 2019

Вы можете использовать перехватчик запросов в Feign.

Пример реализации:

Перехватчик запросов:

@Component
public class MyRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String authorization = requestAttributes.getRequest().getHeader(HttpHeaders.AUTHORIZATION);
        if(null != authorization) {
            template.header(HttpHeaders.AUTHORIZATION, authorization);
        }
    }

}

Конфигурация бина:

@Configuration
public class CustomFeignConfig {

    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }

    @Bean
    public MyRequestInterceptor basicAuthRequestInterceptor() {
        return new MyRequestInterceptor();
    }

    @Bean
    public OkHttpClient client() {
        return new OkHttpClient();
    }

}
...