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ハンドシェイク中にクッキーを処理/保存可能にするために特別な何かをすることが必要ですか?それはそのような握手の外で働くようだが、彼らの間ではない。
4.5.3ダウンロードページの最新バージョンです。 http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/dependency-info.htmlを参照してください。 – MaeseDude