Фильтр WebClient для добавления заголовка аутентификации - PullRequest
0 голосов
/ 06 января 2020

Я собираюсь реализовать ряд запросов к внешним службам, для которых требуется заголовок аутентификации.

Служба аутентификации является внешней службой, и для получения токена мне нужно сделать HTTP-вызов .

Стратегия, с которой я собираюсь двигаться дальше, заключается в создании и добавлении фильтра в WebClient, который вызывает эту службу для получения токена, а затем добавления его в заголовок.

Конечно, я Я собираюсь реализовать некоторый уровень кэширования для получения токена, но дело в том, что я собираюсь добавить запрос в свой запрос.

Как вы думаете, это правильный подход? Или мне просто явно вызвать службу аутентификации вне основного запроса?

1 Ответ

0 голосов
/ 06 января 2020

Если это OAuth2 и вам нужен токен JWT для вашего запроса, Spring Security и WebClient также могут это сделать ( Пример на основе Spring WebFlux , Пример Spring Web ). Я бы не реализовал эту логику c в фильтре, а просто создал бы фильтр WebClient, чтобы установить заголовок Authorization: Bearer XYZ для каждого запроса и передать токен из вне или Spring.

Вы также можете взглянуть на эту библиотеку . Он регулярно выбирает токены OAuth2 в фоновом потоке для вас, и вы можете передать его в WebClient.

. Пользовательский фильтр для WebClient может выглядеть следующим образом:

private ExchangeFilterFunction authHeader(String token) {
    return (request, next) -> next.exchange(ClientRequest.from(request).headers((headers) -> {
      headers.setBearerAuth(token);
    }).build());
}
...