הגדרת בינים של RestTemplate ישירים ודרך פרוקסי ב-Spring
צרו בינים נפרדים של RestTemplate עבור פרוקסי 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 בנקודת ההזרקה כדי לבחור את הבין הנדרש, למשל @Qualifier("directRestTemplate") RestTemplate rest. עצם הגדרת שני הבינים אינה בוחרת ביניהם בתלות דו-משמעית.
הדוגמה הזו בוחרת פרוקסי HTTP ללא אימות. תעבורה שזקוקה לאימות פרוקסי יכולה להיבנות בנפרד עם ספק האישורים הנתמך שלה תוך שמירה על אותו סדר בחירת בינים. עבור Spring 6 עם Apache HttpClient 5, הגבילו את הספק הזה לנקודת הקצה של הפרוקסי.
מיירטים או מפעלי בקשות אחרים שהאפליקציה מתקינה בכוונה עדיין שייכים לתצורת הלקוח שלה עצמה. שמרו אותם עם המסלול שבאמת זקוק להם.