Manche Aufrufe müssen über den Unternehmensproxy laufen, während ein anderer Dienst direkt erreicht wird. Geben Sie diesen Routen eigene RestTemplate-Instanzen, statt eine gemeinsame Factory zu verändern, während Anfragen sich überlappen können.

Innerhalb einer bestehenden Spring-Konfigurationsklasse:

@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);
}

Bei der JDK-Request-Factory von Spring 6.2 liefert Proxy.NO_PROXY eine ausdrückliche Direktverbindungsrichtlinie. Lässt man den Proxy der Factory ungesetzt, wird stattdessen der gewöhnliche URLConnection-Konfigurationsweg erlaubt, der einen JVM-Proxy auswählen kann.

Verwenden Sie @Qualifier an der Injektionsstelle, um das benötigte Bean auszuwählen, zum Beispiel @Qualifier("directRestTemplate") RestTemplate rest. Allein das Definieren der beiden Beans entscheidet bei einer mehrdeutigen Abhängigkeit nicht zwischen ihnen.

Dieses Beispiel wählt einen nicht authentifizierten HTTP-Proxy. Ein Transport, der Proxy-Authentifizierung benötigt, kann separat mit seinem unterstützten Credential-Provider aufgebaut werden, während dieselbe Bean-Auswahl beibehalten wird. Für Spring 6 mit Apache HttpClient 5 begrenzen Sie diesen Provider auf den Proxy-Endpunkt.

Andere Interceptoren oder Request-Factories, die die Anwendung bewusst installiert, gehören weiterhin zu ihrer eigenen Client-Konfiguration. Behalten Sie sie bei der Route, die sie tatsächlich benötigt.

Ähnliche Artikel