O inicio de sesión no proxy pertence ao provedor de credenciais do transporte. Con Spring 6 e Apache HttpClient 5, limita esa conta ao intermediario:

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);

A aplicación fornece os valores proxyUser e proxyPassword e é propietaria do ciclo de vida do cliente HTTP. Reutiliza rest para a carga de traballo en lugar de construír outro modelo por defecto no lugar da chamada.

AuthScope limita onde son elixibles estas credenciais. O exemplo fornece credenciais habituais de usuario e contrasinal; o nome BasicCredentialsProvider non obriga a que cada desafío use o esquema HTTP Basic.

Cun destino HTTPS, o transporte pode responder a un desafío do proxy durante CONNECT, antes de que exista a solicitude HTTP cifrada da aplicación. Un interceptor de destino xenérico que engade Proxy-Authorization non equivale a esa negociación.

Configura por separado calquera conta de destino. Se o proxy segue rexeitando a solicitude, conserva o esquema de autenticación que anuncia e o host e porto efectivos. Unha credencial limitada a outro punto final non coincidirá só porque o contrasinal sexa correcto.

Artigos relacionados