RestTemplate-proxyreferenties beperken met HttpClient 5
Beperk Apache HttpClient 5-referenties tot de proxyhost en -poort voordat u het transport aan een Spring 6 RestTemplate geeft.
Een proxylogin hoort bij de referentieleverancier van het transport. Met Spring 6 en Apache HttpClient 5 beperkt u dat account tot de tussenpartij:
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);De applicatie levert de waarden proxyUser en proxyPassword en bezit de levenscyclus van de HTTP-client. Hergebruik rest voor de werklast in plaats van op de aanroepplek nog een standaardsjabloon te bouwen.
AuthScope beperkt waar deze referenties geldig zijn. Het voorbeeld levert gewone gebruikersnaam/wachtwoord-referenties; de naam BasicCredentialsProvider dwingt niet elke uitdaging om het HTTP Basic-schema te gebruiken.
Met een HTTPS-bestemming kan het transport een proxy-uitdaging tijdens CONNECT beantwoorden, voordat het versleutelde HTTP-verzoek van de applicatie bestaat. Een algemene bestemmingsinterceptor die Proxy-Authorization toevoegt is niet gelijkwaardig aan die onderhandeling.
Configureer elk bestemmingsaccount afzonderlijk. Als de proxy het verzoek nog steeds weigert, behoud dan het aangekondigde authenticatieschema en de effectieve host en poort. Een referentie die tot een ander eindpunt beperkt is, past niet alleen omdat het wachtwoord juist is.