Limiter les identifiants proxy de RestTemplate avec HttpClient 5
Limitez les identifiants d'Apache HttpClient 5 à l'hôte et au port du proxy avant de fournir son transport à un RestTemplate Spring 6.
La connexion au proxy appartient au fournisseur d'identifiants du transport. Avec Spring 6 et Apache HttpClient 5, limitez ce compte à l'intermédiaire :
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);L'application fournit les valeurs proxyUser et proxyPassword et possède le cycle de vie du client HTTP. Réutilisez rest pour la charge de travail au lieu de construire un autre modèle par défaut sur le site d'appel.
AuthScope limite l'endroit où ces identifiants sont éligibles. L'exemple fournit des identifiants ordinaires nom d'utilisateur/mot de passe ; le nom BasicCredentialsProvider n'impose pas à chaque défi d'utiliser le schéma HTTP Basic.
Avec une destination HTTPS, le transport peut répondre à un défi du proxy pendant CONNECT, avant que la requête HTTP chiffrée de l'application existe. Un intercepteur de destination générique ajoutant Proxy-Authorization n'est pas équivalent à cette négociation.
Configurez séparément tout compte de destination. Si le proxy rejette encore la requête, conservez le schéma d'authentification qu'il annonce ainsi que l'hôte et le port effectifs. Un identifiant limité à un autre point de terminaison ne correspondra pas simplement parce que le mot de passe est correct.