2017-02-08 21 views
0

SPNEGO認証を使用してバックエンドへのHTTPコールを実行しようとしています。 SPNEGO認証部分自体はトレースログに基づいて動作するようですが、サーバーのバックエンドはステートフルで、最初の401応答で返されるセッションCookieはhttpclientでは使用されないため、ログインに失敗します。私はトレースログで、httpclientが最初のリクエストを送信し、 "set-cookie"ヘッダーを持つ401を取得しますが、そのクッキーの処理は何も表示されません。 httpclientが「Authorization」ヘッダーを持つ新しい要求で応答すると、クッキーは存在しません。そのため、サーバーは最初から別のログインを開始し、新しい「セットクッキー」ヘッダーと新しいセッションを使用して401で再度応答します。Apache HTTPクライアント4.5.3 SPNEGOハンドシェイクでクッキーが保存されない

ハンドシェイクに失敗した後、httpclientは新しい2番目のセッションクッキーを実際に処理して保存します。これはトレースログにも表示されます。私のCookie処理のコードは次のようになります。

 BasicCookieStore cookieStore = new BasicCookieStore(); 
     HttpClientBuilder clientBuilder = HttpClients.custom() 
       .setConnectionManager(SslHandler.createClientConnectionManager(adapterType)) 
       .setRedirectStrategy(new IgnoreRedirectStrategy()) 
       .setRetryHandler(new DefaultHttpRequestRetryHandler(2, true)) 
       .setDefaultHeaders(allHeaders) 
       .setSSLHostnameVerifier(SslHandler.getHostnameVerifier(adapterType)) 
       .setDefaultRequestConfig(defaultRequestConfig) 
       .setDefaultCookieStore(cookieStore); 

     RequestConfig localConfig = RequestConfig.custom() 
       .setCookieSpec(CookieSpecs.STANDARD) 
       .build(); 
     request.setConfig(localConfig); 

     CloseableHttpClient client = clientBuilder.build(); 
     localcontext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 
     org.apache.http.HttpResponse response = client.execute(request, localcontext); 

だから、基本的に質問がある:SPNEGOまたはNTLMハンドシェイク中にクッキーを処理/保存可能にするために特別な何かをすることが必要ですか?それはそのような握手の外で働くようだが、彼らの間ではない。

+1

4.5.3ダウンロードページの最新バージョンです。 http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/dependency-info.htmlを参照してください。 – MaeseDude

答えて

関連する問題