HTTPCLIENT-1650: fluent Executor to create a local CredentialsProvide instance only if credentials are explicitly set

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.5.x@1681815 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Oleg Kalnichevski 2015-05-26 18:59:46 +00:00
parent 22b412f880
commit 1fc51847e7
1 changed files with 40 additions and 9 deletions

View File

@ -111,19 +111,28 @@ public class Executor {
}
private final HttpClient httpclient;
private final AuthCache authCache;
private final CredentialsProvider credentialsProvider;
private volatile AuthCache authCache;
private volatile CredentialsProvider credentialsProvider;
private volatile CookieStore cookieStore;
Executor(final HttpClient httpclient) {
super();
this.httpclient = httpclient;
this.credentialsProvider = new BasicCredentialsProvider();
this.authCache = new BasicAuthCache();
}
/**
* @since 4.5
*/
public Executor use(final CredentialsProvider credentialsProvider) {
this.credentialsProvider = credentialsProvider;
return this;
}
public Executor auth(final AuthScope authScope, final Credentials creds) {
if (this.credentialsProvider == null) {
this.credentialsProvider = new BasicCredentialsProvider();
}
this.credentialsProvider.setCredentials(authScope, creds);
return this;
}
@ -200,17 +209,33 @@ public class Executor {
}
public Executor clearAuth() {
this.credentialsProvider.clear();
if (this.credentialsProvider != null) {
this.credentialsProvider.clear();
}
return this;
}
/**
* @deprecated (4.5) Use {@link #use(CookieStore)}.
*/
@Deprecated
public Executor cookieStore(final CookieStore cookieStore) {
this.cookieStore = cookieStore;
return this;
}
/**
* @since 4.5
*/
public Executor use(final CookieStore cookieStore) {
this.cookieStore = cookieStore;
return this;
}
public Executor clearCookies() {
this.cookieStore.clear();
if (this.cookieStore != null) {
this.cookieStore.clear();
}
return this;
}
@ -225,9 +250,15 @@ public class Executor {
public Response execute(
final Request request) throws ClientProtocolException, IOException {
final HttpClientContext localContext = HttpClientContext.create();
localContext.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider);
localContext.setAttribute(HttpClientContext.AUTH_CACHE, this.authCache);
localContext.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
if (this.credentialsProvider != null) {
localContext.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider);
}
if (this.authCache != null) {
localContext.setAttribute(HttpClientContext.AUTH_CACHE, this.authCache);
}
if (this.cookieStore != null) {
localContext.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
}
return new Response(request.internalExecute(this.httpclient, localContext));
}