การเรียกบางส่วนต้องใช้พร็อกซีขององค์กร ขณะที่อีกบริการหนึ่งเข้าถึงโดยตรง ให้อินสแตนซ์ 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, จำกัดผู้ให้บริการนั้นไว้ที่ปลายทางของพร็อกซี

อินเทอร์เซ็ปเตอร์หรือโรงงานคำขออื่นที่แอปพลิเคชันติดตั้งโดยเจตนายังคงเป็นของการกำหนดค่าคไลเอนต์ของตนเอง เก็บไว้กับเส้นทางที่ต้องการจริง ๆ

บทความที่เกี่ยวข้อง