프록시 로그인은 전송 계층의 자격 증명 공급자에 속합니다. 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을 추가하는 일반적인 대상 인터셉터는 그 협상과 동등하지 않습니다.

대상 계정은 별도로 구성하세요. 프록시가 여전히 요청을 거부하면 프록시가 알린 인증 스킴과 실제 호스트 및 포트를 유지하세요. 다른 엔드포인트에 범위가 지정된 자격 증명은 비밀번호가 맞다는 이유만으로 일치하지 않습니다.

관련 글