จำกัดขอบเขตข้อมูลรับรองพร็อกซีของ RestTemplate ด้วย HttpClient 5
จำกัดข้อมูลรับรองของ Apache HttpClient 5 ให้อยู่กับโฮสต์และพอร์ตของพร็อกซีก่อนส่งทรานสปอร์ตให้ Spring 6 RestTemplate
การเข้าสู่พร็อกซีเป็นของผู้ให้บริการข้อมูลรับรองของทรานสปอร์ต สำหรับ 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 ไม่เทียบเท่ากับการเจรจานั้น
กำหนดค่าบัญชีปลายทางใด ๆ แยกต่างหาก หากพร็อกซียังปฏิเสธคำขอ ให้เก็บสคีมาการรับรองที่ประกาศไว้กับโฮสต์และพอร์ตจริง ข้อมูลรับรองที่จำกัดไว้สำหรับปลายทางอื่นจะไม่ตรงกันเพียงเพราะรหัสผ่านถูกต้อง