Configurare bean RestTemplate diretti e con proxy in Spring
Create bean RestTemplate distinti per un proxy HTTP e una connessione JDK esplicitamente diretta invece di commutare una rotta condivisa attorno alle singole chiamate.
Alcune chiamate devono usare il proxy aziendale mentre un altro servizio viene raggiunto direttamente. Assegnate a queste rotte istanze RestTemplate distinte invece di modificare una factory condivisa mentre le richieste possono sovrapporsi.
All'interno di una classe di configurazione Spring esistente:
@Bean("directRestTemplate")
RestTemplate directRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(java.net.Proxy.NO_PROXY);
return new RestTemplate(factory);
}
@Bean("proxyRestTemplate")
RestTemplate proxyRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example", 8080)));
return new RestTemplate(factory);
}
Per la factory di richieste JDK di Spring 6.2, Proxy.NO_PROXY fornisce una politica di connessione diretta esplicita. Lasciare il proxy della factory non impostato consente invece il percorso di configurazione URLConnection usuale, che può selezionare un proxy JVM.
Usate @Qualifier nel punto di iniezione per selezionare il bean richiesto, ad esempio @Qualifier("directRestTemplate") RestTemplate rest. Il solo definire i due bean non sceglie tra loro per una dipendenza ambigua.
Questo esempio seleziona un proxy HTTP senza autenticazione. Un trasporto che richiede autenticazione proxy può essere costruito separatamente con il proprio provider di credenziali supportato mantenendo la stessa disposizione di selezione dei bean. Per Spring 6 con Apache HttpClient 5, limitate quel provider all'endpoint del proxy.
Altri interceptor o factory di richieste installati deliberatamente dall'applicazione appartengono comunque alla propria configurazione del client. Teneteli con la rotta che ne ha realmente bisogno.