برخی فراخوانی‌ها باید از پروکسی شرکتی عبور کنند، در حالی که سرویس دیگری مستقیماً در دسترس است. به این مسیرها نمونه‌های 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 برای انتخاب bean موردنیاز استفاده کنید، برای مثال @Qualifier("directRestTemplate") RestTemplate rest. صرفاً تعریف دو bean بین آن‌ها برای یک وابستگی مبهم انتخاب نمی‌کند.

این مثال یک پروکسی HTTP بدون احراز هویت انتخاب می‌کند. یک لایه انتقال که به احراز هویت پروکسی نیاز دارد می‌تواند به‌طور جداگانه با تأمین‌کننده اعتبارنامه پشتیبانی‌شده‌اش ساخته شود و همان ترتیب انتخاب bean حفظ شود. برای Spring 6 با Apache HttpClient 5، آن تأمین‌کننده را به نقطه پایانی پروکسی محدود کنید.

سایر رهگیرها یا کارخانه‌های درخواستی که برنامه به‌طور عمدی نصب می‌کند هنوز به پیکربندی کلاینت خودش تعلق دارند. آن‌ها را با مسیری نگه دارید که واقعاً به آن‌ها نیاز دارد.

مقالات مرتبط