Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache httpclient 4.5.3 SPNEGO握手不存储cookie_Java_Httpclient_Spnego - Fatal编程技术网

Java Apache httpclient 4.5.3 SPNEGO握手不存储cookie

Java Apache httpclient 4.5.3 SPNEGO握手不存储cookie,java,httpclient,spnego,Java,Httpclient,Spnego,我正在尝试使用SPNEGO身份验证对后端执行HTTP调用。SPNEGO身份验证部分本身似乎根据跟踪日志工作,但是登录失败,因为服务器后端是有状态的,并且httpclient没有使用它用第一个401响应返回的会话cookie。我可以在跟踪日志中看到httpclient如何发送第一个请求,获取带有“set cookie”头的401,但没有处理该cookie;然后,当httpclient以带有“Authorization”头的新请求响应时,就不存在cookie;因此,服务器会从头开始另一次登录,然后再

我正在尝试使用SPNEGO身份验证对后端执行HTTP调用。SPNEGO身份验证部分本身似乎根据跟踪日志工作,但是登录失败,因为服务器后端是有状态的,并且httpclient没有使用它用第一个401响应返回的会话cookie。我可以在跟踪日志中看到httpclient如何发送第一个请求,获取带有“set cookie”头的401,但没有处理该cookie;然后,当httpclient以带有“Authorization”头的新请求响应时,就不存在cookie;因此,服务器会从头开始另一次登录,然后再次使用401、新的“set cookie”头和新的会话进行响应

在失败的握手之后,httpclient实际处理新的第二个会话cookie并存储它;这在跟踪日志中也可见。我的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握手过程中,是否需要做一些特殊的事情来存储/处理cookie?它似乎在这种握手之外起作用,但在握手期间不起作用。

我可以使用以下代码解决此问题:


通过它,cookie在握手过程中被正确存储和使用。

4.5.3是下载页面上的最新版本。看见