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