问题描述
是否有一种更简单的方法来设置http客户端以进行抢先式基本身份验证,而不是描述?
在之前的版本(3.x)中曾经是一个简单的方法调用(例如, httpClient.getParams()。setAuthenticationPreemptive(true)
)。
我想避免的主要是添加BasicHttpContext我执行的每个方法。
Is there an easier way to setup the http client for preemptive basic authentication than what described here?
In previous version (3.x) it used to be a simple method call (eg, httpClient.getParams().setAuthenticationPreemptive(true)
).
The main thing I want to avoid is adding the BasicHttpContext to each method I execute.
推荐答案
如果没有每次都传递一个上下文,很难做到这一点,但是你可以做到这一点通过使用请求拦截器。以下是我们使用的一些代码(从他们的JIRA,iirc中找到):
It's difficult to do this without passing a context through every time, but you can probably do it by using a request interceptor. Here is some code that we use (found from their JIRA, iirc):
// Pre-emptive authentication to speed things up
BasicHttpContext localContext = new BasicHttpContext();
BasicScheme basicAuth = new BasicScheme();
localContext.setAttribute("preemptive-auth", basicAuth);
httpClient.addRequestInterceptor(new PreemptiveAuthInterceptor(), 0);
(...)
static class PreemptiveAuthInterceptor implements HttpRequestInterceptor {
public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
// If no auth scheme avaialble yet, try to initialize it
// preemptively
if (authState.getAuthScheme() == null) {
AuthScheme authScheme = (AuthScheme) context.getAttribute("preemptive-auth");
CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute(ClientContext.CREDS_PROVIDER);
HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
if (authScheme != null) {
Credentials creds = credsProvider.getCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()));
if (creds == null) {
throw new HttpException("No credentials for preemptive authentication");
}
authState.setAuthScheme(authScheme);
authState.setCredentials(creds);
}
}
}
}
这篇关于使用Apache HttpClient进行抢占式基本身份验证4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!