Logowanie do proxy należy do dostawcy poświadczeń transportu. W przypadku Spring 6 i Apache HttpClient 5 ogranicz to konto do pośrednika:

var proxy = new org.apache.hc.core5.http.HttpHost(
    "http", "proxy.example", 8080);
var credentials = new org.apache.hc.client5.http.impl.auth
    .BasicCredentialsProvider();
credentials.setCredentials(
    new org.apache.hc.client5.http.auth.AuthScope(proxy),
    new org.apache.hc.client5.http.auth.UsernamePasswordCredentials(
        proxyUser, proxyPassword.toCharArray()));

var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
    .setProxy(proxy)
    .setDefaultCredentialsProvider(credentials)
    .build();
var factory = new org.springframework.http.client
    .HttpComponentsClientHttpRequestFactory(http);
var rest = new org.springframework.web.client.RestTemplate(factory);

Aplikacja dostarcza wartości proxyUser i proxyPassword oraz zarządza cyklem życia klienta HTTP. Użyj ponownie rest dla obciążenia, zamiast budować kolejny domyślny szablon w miejscu wywołania.

AuthScope ogranicza, gdzie te poświadczenia są ważne. Przykład dostarcza zwykłe poświadczenia nazwy użytkownika i hasła; nazwa BasicCredentialsProvider nie wymusza używania schematu HTTP Basic w każdym wyzwaniu.

Przy miejscu docelowym HTTPS transport może odpowiedzieć na wyzwanie proxy podczas CONNECT, zanim istnieje zaszyfrowane żądanie HTTP aplikacji. Ogólny interceptor miejsca docelowego dodający Proxy-Authorization nie jest równoważny tej negocjacji.

Skonfiguruj osobno każde konto miejsca docelowego. Jeśli proxy nadal odrzuca żądanie, zachowaj ogłoszony przez nie schemat uwierzytelniania oraz rzeczywisty host i port. Poświadczenia ograniczone do innego punktu końcowego nie będą pasować tylko dlatego, że hasło jest poprawne.

Powiązane artykuły