Algunas llamadas deben usar el proxy corporativo mientras que otro servicio se alcanza directamente. Dé a esas rutas instancias RestTemplate distintas en lugar de modificar una fábrica compartida mientras las solicitudes pueden solaparse.

Dentro de una clase de configuración de Spring existente:

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

En la fábrica de solicitudes JDK de Spring 6.2, Proxy.NO_PROXY proporciona una política de conexión directa explícita. Dejar sin configurar el proxy de la fábrica permite en cambio la ruta de configuración habitual de URLConnection, que puede elegir un proxy de la JVM.

Use @Qualifier en el punto de inyección para seleccionar el bean requerido, por ejemplo @Qualifier("directRestTemplate") RestTemplate rest. Solo definir los dos beans no elige entre ellos para una dependencia ambigua.

Este ejemplo selecciona un proxy HTTP sin autenticación. Un transporte que necesite autenticación de proxy puede construirse por separado con su proveedor de credenciales compatible, manteniendo la misma disposición de selección de beans. Para Spring 6 con Apache HttpClient 5, limite ese proveedor al punto de conexión del proxy.

Otros interceptores o fábricas de solicitudes que la aplicación instale deliberadamente siguen perteneciendo a su propia configuración de cliente. Manténgalos con la ruta que realmente los necesita.

Artículos relacionados