Используя 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. Так же если токен имеет какое-то время протухания, то имеет смысл получение токена закешировать куда-нибудь. Если Будет один инстанс, то можно хранить его в оперативке