הגבלת פרטי הגישה של פרוקסי RestTemplate עם HttpClient 5
הגבילו את פרטי הגישה של Apache HttpClient 5 למארח ולפורט של הפרוקסי לפני מסירת התעבורה ל-RestTemplate של Spring 6.
הכניסה לפרוקסי שייכת לספק פרטי הגישה של התעבורה. עם Spring 6 ו-Apache HttpClient 5, הגבילו את החשבון הזה למתווך:
var proxy = new org.apache.hc.core5.http.HttpHost(
"http", "proxy.example", 8080);
var credentials = new org.apache.hc.client5.http.impl.auth
.BasicCredentialsProvider();
credentials.setCredentials(
new org.apache.hc.client5.http.auth.AuthScope(proxy),
new org.apache.hc.client5.http.auth.UsernamePasswordCredentials(
proxyUser, proxyPassword.toCharArray()));
var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
.setProxy(proxy)
.setDefaultCredentialsProvider(credentials)
.build();
var factory = new org.springframework.http.client
.HttpComponentsClientHttpRequestFactory(http);
var rest = new org.springframework.web.client.RestTemplate(factory);היישום מספק את הערכים proxyUser ו-proxyPassword ובעל מחזור החיים של לקוח ה-HTTP. השתמשו שוב ב-rest לעומס העבודה במקום לבנות תבנית ברירת מחדל נוספת במקום הקריאה.
AuthScope מגביל היכן פרטי גישה אלה תקפים. הדוגמה מספקת פרטי גישה רגילים של שם משתמש וסיסמה; השם BasicCredentialsProvider אינו כופה על כל אתגר להשתמש בסכימת HTTP Basic.
עם יעד HTTPS, התעבורה יכולה להשיב לאתגר של הפרוקסי במהלך CONNECT, לפני ששורת ה-HTTP המוצפנת של היישום קיימת. מיירט יעד כללי שמוסיף Proxy-Authorization אינו שווה ערך למשא ומתן הזה.
הגדירו כל חשבון יעד בנפרד. אם הפרוקסי עדיין דוחה את הבקשה, שמרו את סכימת האימות שהוא מודיע עליה ואת המארח והפורט בפועל. פרטי גישה המוגבלים לנקודת קצה אחרת לא יתאימו רק מפני שהסיסמה נכונה.