2016-08-10 20 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"); 

をしかし、我々はTomcatのサーバ上で設定する権限を持っていないように私はSystem.setPropertiesの(「」、「」)オプションを使用することはできません:私はラインの下に追加した場合、それは動作します。

このオブジェクトの作成中に調査しましたが、OAuth2RestTemplateでプロキシを設定する方法が見つかりませんでした。

ご協力いただければ幸いです。ありがとう

+0

質問が不明な場合は教えてください。どんな助けでも大変感謝しています。 – aks2012

答えて

4

OAuth2RestTemplateは、AccessTokenProviderのセットを作成して、異なる種類の認可タイプに従って認可サーバーからトークンを取得します。たとえば、AuthorizationCodeAccessTokenProviderは、認可タイプがauthorization_codeのアクセストークンを取得するために使用されます。トークンプロバイダ自体がRestTemplateを開始してリクエストを送信しますが、作成したばかりのOAuth2RestTemplateは使用しません。 1つの方法で問題を解決できます。それはあなた自身を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を追加することができます。