Certains appels doivent passer par le proxy d'entreprise tandis qu'un autre service est joint directement. Donnez à ces routes des instances RestTemplate distinctes plutôt que de modifier une fabrique partagée pendant que des requêtes peuvent se chevaucher.

Dans une classe de configuration Spring existante :

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

Pour la fabrique de requêtes JDK de Spring 6.2, Proxy.NO_PROXY fournit une politique de connexion directe explicite. Laisser le proxy de la fabrique non défini autorise plutôt le chemin de configuration URLConnection habituel, qui peut sélectionner un proxy JVM.

Utilisez @Qualifier sur le point d'injection pour sélectionner le bean requis, par exemple @Qualifier("directRestTemplate") RestTemplate rest. Le simple fait de définir les deux beans ne choisit pas entre eux pour une dépendance ambiguë.

Cet exemple sélectionne un proxy HTTP sans authentification. Un transport nécessitant une authentification par proxy peut être construit séparément avec son fournisseur d'identifiants pris en charge tout en conservant la même disposition de sélection de bean. Pour Spring 6 avec Apache HttpClient 5, limitez ce fournisseur au point de terminaison du proxy.

Les autres intercepteurs ou fabriques de requêtes délibérément installés par l'application relèvent toujours de sa propre configuration de client. Gardez-les avec la route qui en a réellement besoin.

Articles similaires