2017-02-08 16 views
0

Я пытаюсь выполнить HTTP-вызов на бэкэнд с помощью аутентификации SPNEGO. Сама часть аутентификации SPNEGO, похоже, работает в соответствии с журналами трассировки, но вход завершается с ошибкой, так как серверный сервер является работоспособным, а cookie сеанса, который он отправляет обратно с его первым ответом 401, не используется httpclient. Я могу видеть в журнале трассировки, как httpclient отправляет первый запрос, получает 401 с заголовком «set-cookie», но не обрабатывает этот файл cookie; а затем, когда httpclient отвечает новым запросом с заголовком «Авторизация», cookie не существует; из-за этого сервер запускает другой логин с нуля и просто отвечает на 401 снова, с новым заголовком «set-cookie» и новым сеансом.Apache httpclient 4.5.3 Связывание с SPNEGO не хранит cookie

После неудачного рукопожатия, httpclient фактически обрабатывает новый, второй сеанс 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 IS - самая последняя версия на странице загрузки. См. Http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/dependency-info.html. – MaeseDude

ответ