Множественный SSLContext с веб-клиентом из WebFlux

Мне нужно вызвать несколько разных API из моего приложения с помощью WebClient. Допустим, есть два разных API. Для этих API я должен использовать разные SSLContexts, созданные из разных сертификатов. Я создаю для них разные SSLContexts (используя разные сертификаты).

В качестве бэкэнда для WebClient я использую стандартный подход — ReactorClientHttpConnector с Reactor Netty Http client

Там можно настроить SSL следующим образом:

new ReactorClientHttpConnector(HttpClient.create()
        .secure(sslContextSpec -> sslContextSpec.sslContext(sslContext))
);

Но я не уверен, как настроить несколько разных SSLContext (для каждого API).

Теперь я вижу три способа сделать это:


Опция 1:

Создайте два разных ReactorClientHttpConnector с разными HttpClient (HttpClient.create) и поместите туда мои SSLContexts.

В конце концов у меня будет два WebClient, каждый из которых основан на собственном ReactorClientHttpConnector. Я не знаю, является ли это правильным подходом, поскольку я подозреваю, что в моем приложении будут две разные группы циклов событий.

Вариант 2:

Возможно, я могу связать метод .secure() и добавить разные SSLContexts следующим образом:

    new ReactorClientHttpConnector(HttpClient.create()
            .secure(sslContextSpec -> sslContextSpec.sslContext(sslContext))
            .secure(sslContextSpec -> sslContextSpec.sslContext(sslContext2))
    );

Однако я не уверен, будут ли они применяться и не будут переопределены, и будет ли это работать вообще.

Вариант 3:

Каким-то образом создайте один SSLContext, содержащий все необходимые сертификаты


Итак, как с этим справиться?

Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
0
0
208
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте два разных WebClient — это подход 1.

Создайте два разных ReactorClientHttpConnector с разными HttpClient (HttpClient.create) и поместите туда мои SSLContexts. В конце концов у меня будет два WebClient, каждый из которых основан на собственном ReactorClientHttpConnector. Я не знаю, является ли это правильным подходом, поскольку я подозреваю, что в моем приложении будут две разные группы циклов событий.

Два WebClient будут совместно использовать группу цикла событий. Они будут использовать разные группы циклов событий, ТОЛЬКО если вы настроите их через runOn или используете ReactorResourceFactory. Смотрите больше здесь

Другие вопросы по теме