Limitați acreditările proxy ale RestTemplate cu HttpClient 5
Limitați acreditările Apache HttpClient 5 la gazda și portul proxy înainte de a furniza transportul unui RestTemplate Spring 6.
Autentificarea la proxy aparține furnizorului de acreditări al transportului. Cu Spring 6 și Apache HttpClient 5, limitați acel cont la intermediar:
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);Aplicația furnizează valorile proxyUser și proxyPassword și deține ciclul de viață al clientului HTTP. Reutilizați rest pentru sarcina de lucru în loc să construiți un alt șablon implicit la locul apelului.
AuthScope limitează unde aceste acreditări sunt valabile. Exemplul furnizează acreditări obișnuite nume de utilizator/parolă; numele BasicCredentialsProvider nu obligă fiecare provocare să folosească schema HTTP Basic.
Cu o destinație HTTPS, transportul poate răspunde unei provocări a proxy în timpul CONNECT, înainte de a exista cererea HTTP criptată a aplicației. Un interceptor de destinație generic care adaugă Proxy-Authorization nu este echivalent cu acea negociere.
Configurați separat orice cont de destinație. Dacă proxy-ul încă respinge cererea, păstrați schema de autentificare anunțată și gazda și portul efective. O acreditare limitată la alt punct final nu se va potrivi doar pentru că parola este corectă.