HttpClient 5 で RestTemplate のプロキシ認証情報を限定する
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 の宛先では、アプリケーションの暗号化された HTTP リクエストが存在する前に、トランスポートが CONNECT 中にプロキシのチャレンジへ応答できます。Proxy-Authorization を追加する汎用的な宛先インターセプターは、このネゴシエーションと同等ではありません。
宛先のアカウントは別々に設定してください。プロキシが依然としてリクエストを拒否する場合は、通知された認証スキームと実際のホストおよびポートを保持します。別のエンドポイントに限定された認証情報は、パスワードが正しいというだけで一致するわけではありません。