복붙노트

[SPRING] Spring RestTemplate 및 프록시 인증

SPRING

Spring RestTemplate 및 프록시 인증

나는 Spring과 REST 호출을 시도하고있다. 제가 알기에, 옳은 길은 RestTemplate (?)을 사용하는 것입니다. 문제는, 나는 프록시 뒤에있다.

지금 내 코드는 다음과 같습니다.

    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    InetSocketAddress address = new InetSocketAddress(host, 3128);
    Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
    factory.setProxy(proxy);

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setRequestFactory(factory);

작동하는 것처럼 보이지만 프록시에서 인증해야하지만 어떻게 수행됩니까? 프록시 유형과 SimpleClientHttpRequestFactory 유형은 자격 증명을 처리하지 않는 것 같습니다. 신임장이 없다면, 나는 단지 407을 얻고있다 ...

해결법

  1. ==============================

    1.몇 가지 다른 옵션을 사용하여 다음 코드를 작성했습니다. 작성시 RestTemplate에 대한 프록시를 설정할 수있는 기능이 있으므로 별도의 메소드로 리팩터링 할 수 있습니다. 단지 메모에 추가 종속성이 있으므로 염두에 두십시오.

    몇 가지 다른 옵션을 사용하여 다음 코드를 작성했습니다. 작성시 RestTemplate에 대한 프록시를 설정할 수있는 기능이 있으므로 별도의 메소드로 리팩터링 할 수 있습니다. 단지 메모에 추가 종속성이 있으므로 염두에 두십시오.

        private RestTemplate createRestTemplate() throws Exception {
            final String username = "myusername";
            final String password = "myPass";
            final String proxyUrl = "proxy.nyc.bigtower.com";
            final int port = 8080;
    
            CredentialsProvider credsProvider = new BasicCredentialsProvider();
            credsProvider.setCredentials( 
                    new AuthScope(proxyUrl, port), 
                    new UsernamePasswordCredentials(username, password));
    
            HttpHost myProxy = new HttpHost(proxyUrl, port);
            HttpClientBuilder clientBuilder = HttpClientBuilder.create();
    
            clientBuilder.setProxy(myProxy).setDefaultCredentialsProvider(credsProvider).disableCookieManagement();
    
            HttpClient httpClient = clientBuilder.build();
            HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
            factory.setHttpClient(httpClient);
    
            return new RestTemplate(factory);
        }
    

    // 사용 된 종속성.

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
    
  2. ==============================

    2.아래 코드는 나를 위해 일했습니다.

    아래 코드는 나를 위해 일했습니다.

    RestTemplate restTemplate = new RestTemplate();
    
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials( new AuthScope("proxyHost", "proxyPort"), new UsernamePasswordCredentials("proxyUser", "proxyPass") );
    HttpClientBuilder clientBuilder = HttpClientBuilder.create();
    
    clientBuilder.useSystemProperties();
    clientBuilder.setProxy(new HttpHost("proxyHost", "proxyPort"));
    clientBuilder.setDefaultCredentialsProvider(credsProvider);
    clientBuilder.setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy());
    
    CloseableHttpClient client = clientBuilder.build();
    
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setHttpClient(client);
    
    restTemplate.setRequestFactory(factory);
    
  3. ==============================

    3.동일한 코드를 사용했지만 407.proxy 자격 증명이 curl 명령을 사용하여 올바르게 작동하지만 위 코드를 사용하면 작동하지 않습니다. 어떤 생각?

    동일한 코드를 사용했지만 407.proxy 자격 증명이 curl 명령을 사용하여 올바르게 작동하지만 위 코드를 사용하면 작동하지 않습니다. 어떤 생각?

  4. from https://stackoverflow.com/questions/31273236/spring-resttemplate-and-proxy-auth by cc-by-sa and MIT license