Limitare le credenziali proxy di RestTemplate con HttpClient 5
Limita le credenziali di Apache HttpClient 5 all'host e alla porta del proxy prima di fornire il trasporto a un RestTemplate Spring 6.
Il login al proxy appartiene al provider di credenziali del trasporto. Con Spring 6 e Apache HttpClient 5, limita quell'account all'intermediario:
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'applicazione fornisce i valori proxyUser e proxyPassword e possiede il ciclo di vita del client HTTP. Riusa rest per il carico di lavoro invece di costruire un altro modello predefinito nel punto di chiamata.
AuthScope limita dove queste credenziali sono idonee. L'esempio fornisce credenziali ordinarie nome utente/password; il nome BasicCredentialsProvider non impone a ogni challenge di usare lo schema HTTP Basic.
Con una destinazione HTTPS, il trasporto può rispondere a una challenge del proxy durante CONNECT, prima che esista la richiesta HTTP cifrata dell'applicazione. Un interceptor di destinazione generico che aggiunge Proxy-Authorization non equivale a quella negoziazione.
Configura separatamente qualsiasi account di destinazione. Se il proxy rifiuta ancora la richiesta, conserva lo schema di autenticazione che annuncia e l'host e la porta effettivi. Una credenziale limitata a un altro endpoint non corrisponderà solo perché la password è corretta.