Используя feign client, пройти jwt авторизацию и использовать jwt-токен при каждом запросе

Я пишу микросервисы. Апи центрального микросервиса системы защищено простой авторизацией на основе JWT токена (не oauth 2). Чтобы получить доступ к апи этого микросервиса, надо отправить POST-запрос с логином и паролем на адрес /auth/login, получить токен и отправлять этот токен при каждом запросе ресурсов. Токен возвращается с сервера в заголовке x-csrf-token. Это некорректно, но это так. С нового микросервиса мне надо получить доступ к апи этого сервиса и для этого надо авторизоваться. Для запросов буду использовать feign client. Как настроить feign так, чтобы он прошел авторизацию и использовал jwt-токен при каждом запросе?


Ответы (1 шт):

Автор решения: Дмитрий Рихтер

Тебе поможет тут RequestInterceptor.

Код примерно будет таким

@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Value(value = "myClient")
private String myClient;

@Override
public void apply(RequestTemplate requestTemplate) {
    String feignClientName = requestTemplate.feignTarget().name();
    if (myClient.equals(feignClientName)) {
        //Получаем тут токен
        requestTemplate.header(HttpHeaders.AUTHORIZATION,
                BEARER.concat("Вставляем сюда токен"));
    }
  }
}

В итоге перед отправкой будет вставляться токен в Header. Так же если токен имеет какое-то время протухания, то имеет смысл получение токена закешировать куда-нибудь. Если Будет один инстанс, то можно хранить его в оперативке

→ Ссылка