Sommige aanroepen moeten via de bedrijfsproxy lopen, terwijl een andere dienst rechtstreeks wordt bereikt. Geef die routes afzonderlijke RestTemplate-instanties in plaats van één gedeelde factory te wijzigen terwijl verzoeken kunnen overlappen.

Binnen een bestaande Spring-configuratieklasse:

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

Voor de JDK-requestfactory van Spring 6.2 levert Proxy.NO_PROXY een expliciet direct verbindingsbeleid. Laat je de proxy van de factory oningesteld, dan wordt juist het gewone URLConnection-configuratiepad toegestaan, dat een JVM-proxy kan kiezen.

Gebruik @Qualifier op het injectiepunt om de benodigde bean te kiezen, bijvoorbeeld @Qualifier("directRestTemplate") RestTemplate rest. Alleen de twee beans definiëren kiest bij een dubbelzinnige afhankelijkheid niet tussen hen.

Dit voorbeeld kiest een HTTP-proxy zonder authenticatie. Een transport dat proxy-authenticatie nodig heeft, kan apart worden opgebouwd met zijn ondersteunde credential-provider terwijl dezelfde bean-selectie-indeling behouden blijft. Voor Spring 6 met Apache HttpClient 5, beperk die provider tot het proxy-eindpunt.

Andere interceptors of requestfactories die de applicatie bewust installeert, horen nog steeds bij de eigen clientconfiguratie. Houd ze bij de route die ze echt nodig heeft.

Gerelateerde artikelen