Как определить глобальный статический заголовок в Spring Boot Feign Client

У меня есть приложение для весенней загрузки, и я хочу создать клиент Feign со статически определенным значением заголовка (для аутентификации, но не для базовой аутентификации). Я нашел аннотацию @Headers, но, похоже, она не работает в области Spring Boot. Я подозреваю, что это как-то связано с использованием SpringMvcContract.

Вот код, с которым я хочу работать:

@FeignClient(name = "foo", url = "http://localhost:4444/feign")
@Headers({"myHeader:value"})
public interface LocalhostClient {

Но не добавляет заголовки.

Я сделал чистое весеннее загрузочное приложение с моими попытками и разместил его на github здесь: пример на github

Единственный способ заставить его работать - это определить RequestInterceptor как глобальный компонент, но я не хочу этого делать, потому что это повлияет на других клиентов.


person Stimp    schedule 21.05.2018    source источник


Ответы (2)


Вы также можете добиться этого, добавив заголовок к отдельным методам следующим образом:

@RequestMapping(method = RequestMethod.GET, path = "/resource", headers = {"myHeader=value"})

person Ali Daniyal    schedule 22.05.2018

Вы можете установить определенный класс конфигурации в своем воображаемом интерфейсе и определить там bean-компонент RequestInterceptor. Например:

@FeignClient(name = "foo", url = "http://localhost:4444/feign", 
configuration = FeignConfiguration.class)
public interface LocalhostClient {
}

@Configuration
public class FeignConfiguration {

  @Bean
  public RequestInterceptor requestTokenBearerInterceptor() {
    return new RequestInterceptor() {
      @Override
      public void apply(RequestTemplate requestTemplate) {
        // Do what you want to do
      }
    };
  }
}
person onnoweb    schedule 22.05.2018
comment
Спасибо! Единственное, что меня беспокоит в отношении подхода @Configuration, заключается в том, что Feign требует этой аннотации, и вы должны быть осторожны, чтобы не допустить ее при сканировании компонентов. Мне это кажется опасным. Если бы этот класс каким-то образом был добавлен к сканированию компонентов, мы бы внезапно отправили конфиденциальную информацию ВСЕМ нашим воображаемым конечным точкам. +1 хотя, потому что это технически отвечает на мой конкретный вопрос, хотя я собираюсь использовать предложение Али - person Stimp; 22.05.2018