RestTemplate-Proxy-Anmeldedaten mit HttpClient 5 eingrenzen
Grenzen Sie Apache-HttpClient-5-Anmeldedaten auf Proxy-Host und -Port ein, bevor Sie den Transport an ein Spring-6-RestTemplate übergeben.
Ein Proxy-Login gehört zum Anmeldedaten-Anbieter des Transports. Bei Spring 6 mit Apache HttpClient 5 grenzen Sie dieses Konto auf den Intermediär ein:
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);Die Anwendung liefert die Werte proxyUser und proxyPassword und besitzt den Lebenszyklus des HTTP-Clients. Verwenden Sie rest für die Arbeitslast erneut, statt an der Aufrufstelle eine weitere Standardvorlage zu erzeugen.
AuthScope begrenzt, wo diese Anmeldedaten gelten. Das Beispiel liefert gewöhnliche Benutzername/Passwort-Anmeldedaten; der Name BasicCredentialsProvider erzwingt nicht, dass jede Challenge das HTTP-Basic-Schema verwendet.
Bei einem HTTPS-Ziel kann der Transport eine Proxy-Challenge während CONNECT beantworten, bevor die verschlüsselte HTTP-Anfrage der Anwendung existiert. Ein allgemeiner Ziel-Interceptor, der Proxy-Authorization hinzufügt, ist nicht gleichwertig zu dieser Aushandlung.
Konfigurieren Sie jedes Zielkonto separat. Wenn der Proxy die Anfrage weiterhin ablehnt, behalten Sie sein angekündigtes Authentifizierungsschema sowie den effektiven Host und Port. Ein auf einen anderen Endpunkt beschränkter Anmeldedatensatz passt nicht allein deshalb, weil das Passwort korrekt ist.