Batasi Kredensial Proxy RestTemplate dengan HttpClient 5
Batasi kredensial Apache HttpClient 5 ke host dan port proxy sebelum menyerahkan transportnya ke RestTemplate Spring 6.
Login proxy termasuk milik penyedia kredensial transport. Untuk Spring 6 dengan Apache HttpClient 5, batasi akun itu ke perantara:
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);Aplikasi menyediakan nilai proxyUser dan proxyPassword serta memiliki siklus hidup klien HTTP. Gunakan kembali rest untuk beban kerja alih-alih membuat templat default lain di lokasi pemanggilan.
AuthScope membatasi tempat kredensial ini berlaku. Contoh menyediakan kredensial nama pengguna/kata sandi biasa; nama BasicCredentialsProvider tidak memaksa setiap tantangan memakai skema HTTP Basic.
Dengan tujuan HTTPS, transport dapat menjawab tantangan proxy selama CONNECT, sebelum permintaan HTTP terenkripsi aplikasi ada. Intersepsi tujuan generik yang menambahkan Proxy-Authorization tidak setara dengan negosiasi itu.
Konfigurasikan akun tujuan mana pun secara terpisah. Jika proxy masih menolak permintaan, pertahankan skema autentikasi yang diumumkannya serta host dan port efektif. Kredensial yang dibatasi untuk endpoint lain tidak akan cocok hanya karena kata sandinya benar.