Apache httpclient 4.5.13 是否抢占式身份验证



我遇到了这段代码,我正在尝试重构已弃用的DefaultHttpClient用法以使用HttpClientBuilder并尝试复制身份验证部分。

在 HttpClientBuilder 世界中,我可以使用抢占式 (HttpClientContext.create().setAuthCache(new BasicAuthCache())) 或不使用 - 将凭据提供程序直接设置为构建器 (httpClientBuilder.setDefaultCredentialsProvider(new BasicCredentialsProvider()))

在这里,我没有看到以任何方式指定这一点,所以我通过 httpclient 库进行了调试,但无法确定得出结论。你能告诉我,下面的代码是在进行抢占式还是非抢占式身份验证吗? (由于我必须重构较旧的http客户端3.x代码,因此它非常富有表现力,因为有.setAuthenticationPreemptive方法,它清楚地告诉我它是什么)

import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpParams;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.auth.params.AuthParams;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
...
DefaultHttpClient client = new DefaultHttpClient(new BasicHttpParams());
HttpParams params = client.getParams();
AuthParams.setCredentialCharset(params, "UTF-8");
client.getCredentialsProvider()
.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("login","passwd"));
...
client.execute(new HttpGet("uri"));

谢谢!

看起来简单的答案是:上面是一个非抢占式身份验证的示例。

为什么?因为设置抢占式拦截器的唯一位置是在处理org.apache.http.client.protocol.RequestAuthCache拦截器期间,它查找设置AuthCache,在上述情况下未设置。

相关内容

  • 没有找到相关文章

最新更新