2016-08-10 14 views
3

OAuth2에 의해 보안되는 API를 사용해야합니다. 그 때문에 OAuth2RestTemplate을 사용하고 있습니다. 그러나 오류 아래에 무엇입니까 :이 때문에 프록시 문제에 무슨 일이 일어나고OAuth2RestTemplate의 프록시 구성

java.net.ConnectException: Connection timed out: connect 

. 내가 RestTemplate에서 프록시를 설정하는 방법을 알고 :

SimpleClientHttpRequestFactory clientHttpRequestFactory = new  SimpleClientHttpRequestFactory(); 
Proxy proxy = new Proxy(Proxy.Type.HTTP, new  InetSocketAddress("Proxy host", 8080)); 

clientHttpRequestFactory.setProxy (프록시); RestTemplate restTemplate = new RestTemplate (clientHttpRequestFactory);

내가 OAuth2RestTemplate 설정하려고 같은 방법 : 제대로 작동하고 포기하지 않는

@Bean 
public OAuth2RestOperations restTemplate(OAuth2ClientContext oauth2ClientContext) { 
    OAuth2RestTemplate client = new OAuth2RestTemplate(resource(), oauth2ClientContext); 
    SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory(); 
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT)); 
    clientHttpRequestFactory.setProxy(proxy); 
    client.setRequestFactory(clientHttpRequestFactory); 
    return client; 
} 

그러나이 예외를 "연결 시간이 초과되었습니다." 이것은 첫 번째 줄인 OAuth2RestTemplate client = new OAuth2RestTemplate(resource(), oauth2ClientContext); 때문에 프록시 토큰이 필요하다는 것을 의미하는 액세스 토큰을 얻으려고하기 때문에 발생합니다. 우리가 바람둥이 서버에 설정할 수있는 권한이 없기 때문에 ("", "") 옵션을

System.setProperty("https.proxyHost", "urproxy.com"); 
System.setProperty("https.proxyPort", "8080"); 

하지만 System.setProperties의를 사용할 수 없습니다 : 나는 줄 아래에 추가하면 다음 작동합니다.

이 개체를 만드는 동안 OAuth2RestTemplate에서 프록시를 설정할 방법을 조사했지만 찾을 수 없습니다.

도움을 주시면 감사하겠습니다. 감사

+0

질문이 명확하지 않은 경우 알려주십시오. 어떤 도움을 주셔서 감사합니다. – aks2012

답변

4

OAuth2RestTemplateAccessTokenProvider 집합을 만들어서 다른 종류의 허가 유형에 따라 인증 서버에서 토큰을 검색합니다. 예를 들어 AuthorizationCodeAccessTokenProvider은 권한 부여 유형이 authorization_code 인 액세스 토큰을 검색하는 데 사용됩니다. 토큰 공급자 자체가 RestTemplate을 시작하여 요청을 보내지 만 방금 생성 된 OAuth2RestTemplate을 사용하지 않습니다. 한 가지 방법으로 문제를 해결할 수 있습니다. 즉, 자신을 AccessTokenProvider으로 만들고 요청 팩토리를 설정하는 것입니다.

SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); 
Proxy proxy= new Proxy(Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT)); 
requestFactory.setProxy(proxy);  

AuthorizationCodeAccessTokenProvider authorizationCodeAccessTokenProvider = new AuthorizationCodeAccessTokenProvider(); 
authorizationCodeAccessTokenProvider.setRequestFactory(requestFactory); 

ImplicitAccessTokenProvider implicitAccessTokenProvider = new ImplicitAccessTokenProvider(); 
implicitAccessTokenProvider.setRequestFactory(requestFactory); 

AccessTokenProvider accessTokenProvider = new AccessTokenProviderChain(
Arrays.<AccessTokenProvider> asList(authorizationCodeAccessTokenProvider, implicitAccessTokenProvider)); 

OAuth2RestTemplate client = new OAuth2RestTemplate(github(), oauth2ClientContext); 
client.setAccessTokenProvider(accessTokenProvider); 

는 또한 OAuth2RestTemplate에 ResourceOwnerPasswordAccessTokenProvider 및 ClientCredentialsAccessTokenProvider을 추가 할 수 있습니다.