Някои извиквания трябва да минават през корпоративното прокси, докато друга услуга се достига директно. Дайте на тези маршрути отделни инстанции RestTemplate, вместо да променяте една споделена фабрика, докато заявките може да се застъпват.

Вътре в съществуващ конфигурационен клас на Spring:

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

За фабриката за заявки JDK на Spring 6.2 Proxy.NO_PROXY задава изрична политика за директна връзка. Ако проксито на фабриката остане незададено, вместо това се разрешава обичайният път за конфигурация URLConnection, който може да избере прокси на JVM.

Използвайте @Qualifier в точката на инжектиране, за да изберете нужния бийн, например @Qualifier("directRestTemplate") RestTemplate rest. Самото дефиниране на двата бийна не избира между тях при двусмислена зависимост.

Този пример избира HTTP прокси без удостоверяване. Транспорт, който се нуждае от удостоверяване на прокси, може да бъде изграден отделно с поддържания от него доставчик на идентификационни данни, като се запази същата схема за избор на бийн. За Spring 6 с Apache HttpClient 5, ограничете този доставчик до крайната точка на проксито.

Други интерцептори или фабрики за заявки, умишлено инсталирани от приложението, все още принадлежат към собствената му клиентска конфигурация. Задръжте ги с маршрута, който наистина се нуждае от тях.

Подобни статии