2017-02-08 4 views
0

Ich versuche, einen HTTP-Aufruf an ein Back-End mit SPNEGO-Authentifizierung durchzuführen. Der SPNEGO-Authentifizierungsteil selbst scheint nach den Ablaufverfolgungsprotokollen zu funktionieren, aber die Anmeldung schlägt fehl, da das Server-Backend statusbehaftet ist und der Sitzungscookie, den er mit seiner ersten Antwort zurücksendet, nicht von httpclient verwendet wird. Ich kann im Ablaufprotokoll sehen, wie httpclient die erste Anfrage sendet, erhält eine 401 mit einem "set-cookie" -Header, aber keine Verarbeitung dieses Cookies; und dann, wenn httpclient mit einer neuen Anfrage mit dem Header "Authorization" antwortet, gibt es kein Cookie; Aus diesem Grund startet der Server eine neue Anmeldung von Grund auf neu und antwortet nur mit einem 401 erneut, mit einem neuen Header "Set-Cookie" und einer neuen Sitzung.Apache httpclient 4.5.3 SPNEGO-Handshake speichert kein Cookie

Nach dem fehlgeschlagenen Handshake verarbeitet httpclient den neuen zweiten Session-Cookie und speichert ihn; Dies ist auch im Ablaufverfolgungsprotokoll sichtbar. Mein Cookiebehandlung Code sieht wie folgt aus:

 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); 

Also im Grunde ist die Frage: Ist es notwendig, etwas Besonderes zu ermöglichen zu tun Speicherung/Handhabung von Cookies während eines SPNEGO oder NTLM-Handshake? Es scheint außerhalb solcher Händeschütteln zu funktionieren, aber nicht während dieser.

+1

4.5.3 IST die neueste Version auf der Download-Seite. Siehe http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/dependency-info.html – MaeseDude

Antwort