Ogranicz poświadczenia proxy RestTemplate za pomocą HttpClient 5
Ogranicz poświadczenia Apache HttpClient 5 do hosta i portu proxy, zanim przekażesz transport do Spring 6 RestTemplate.
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.