Added immutable CredentialsProvider implementations and a CredentialsProvider builder; changed test cases and examples to use immutable CredentialsProvider where possible

This commit is contained in:
Oleg Kalnichevski 2021-09-23 12:34:27 +02:00
parent 17ebfc529e
commit 7b47b28d46
21 changed files with 474 additions and 239 deletions

View File

@ -48,8 +48,8 @@ import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.DefaultAuthenticationStrategy;
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.BasicScheme;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.testing.BasicTestAuthenticator;
import org.apache.hc.client5.testing.auth.Authenticator;
@ -298,11 +298,10 @@ public abstract class AbstractHttpAsyncClientAuthentication<T extends CloseableH
});
final HttpHost target = start();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new UsernamePasswordCredentials("test", "test".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(target, "test", "test".toCharArray())
.build());
final Future<SimpleHttpResponse> future1 = httpclient.execute(SimpleRequestBuilder.get()
.setHttpHost(target)

View File

@ -51,9 +51,9 @@ import org.apache.hc.client5.http.classic.methods.HttpPut;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.DefaultAuthenticationStrategy;
import org.apache.hc.client5.http.impl.auth.BasicAuthCache;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.BasicScheme;
import org.apache.hc.client5.http.impl.auth.BasicSchemeFactory;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.testing.BasicTestAuthenticator;
@ -313,10 +313,9 @@ public class TestClientAuthentication extends LocalServerTestBase {
final HttpHost target = start();
final HttpClientContext context = HttpClientContext.create();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new UsernamePasswordCredentials("test", "test".toCharArray()));
context.setCredentialsProvider(credsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(target, "test", "test".toCharArray())
.build());
final HttpGet httpget = new HttpGet("/");
@ -365,11 +364,10 @@ public class TestClientAuthentication extends LocalServerTestBase {
});
final TestTargetAuthenticationStrategy authStrategy = new TestTargetAuthenticationStrategy();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(target, "this realm", null),
new UsernamePasswordCredentials("test", "this".toCharArray()));
credsProvider.setCredentials(new AuthScope(target, "that realm", null),
new UsernamePasswordCredentials("test", "that".toCharArray()));
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(target, "this realm", null), "test", "this".toCharArray())
.add(new AuthScope(target, "that realm", null), "test", "that".toCharArray())
.build();
this.clientBuilder.setTargetAuthenticationStrategy(authStrategy);
this.httpclient = this.clientBuilder.build();
@ -519,10 +517,9 @@ public class TestClientAuthentication extends LocalServerTestBase {
final AuthCache authCache = new BasicAuthCache();
authCache.put(target, new BasicScheme());
context.setAuthCache(authCache);
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new UsernamePasswordCredentials("test", "stuff".toCharArray()));
context.setCredentialsProvider(credsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(target, "test", "stuff".toCharArray())
.build());
final HttpGet httpget = new HttpGet("/");
final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget, context);
@ -587,9 +584,9 @@ public class TestClientAuthentication extends LocalServerTestBase {
});
final HttpClientContext context = HttpClientContext.create();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new UsernamePasswordCredentials("test", "test".toCharArray()));
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(target, "test", "test".toCharArray())
.build();
context.setCredentialsProvider(credsProvider);
for (int i = 0; i < 2; i++) {

View File

@ -28,11 +28,11 @@ package org.apache.hc.client5.testing.sync;
import java.io.IOException;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.NTCredentials;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.http.ClassicHttpRequest;
@ -71,9 +71,9 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
final HttpHost target = start();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new NTCredentials("test", "test".toCharArray(), null, null));
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(target, new NTCredentials("test", "test".toCharArray(), null, null))
.build();
this.httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
@ -118,9 +118,9 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
"AGUAcgB2AGUAcgA="));
final HttpHost target = start();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new NTCredentials("test", "test".toCharArray(), null, null));
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(target, new NTCredentials("test", "test".toCharArray(), null, null))
.build();
this.httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
@ -142,9 +142,9 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
"AGUAcgB2AGUAcgACAAwARABvAG0AYQBpAG4AAQAMAFMAZQByAHYAZQByAAAAAAA="));
final HttpHost target = start();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new NTCredentials("test", "test".toCharArray(), null, null));
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(target, new NTCredentials("test", "test".toCharArray(), null, null))
.build();
this.httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
@ -187,10 +187,9 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
final HttpHost target = start();
final HttpClientContext context = HttpClientContext.create();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new NTCredentials("test", "test".toCharArray(), null, null));
context.setCredentialsProvider(credsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(target, new NTCredentials("test", "test".toCharArray(), null, null))
.build());
final HttpGet httpget = new HttpGet("/");
final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
@ -208,10 +207,9 @@ public class TestClientAuthenticationFakeNTLM extends LocalServerTestBase {
final HttpHost target = start();
final HttpClientContext context = HttpClientContext.create();
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(null, null, -1, null ,null),
new NTCredentials("test", "test".toCharArray(), null, null));
context.setCredentialsProvider(credsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(target, new NTCredentials("test", "test".toCharArray(), null, null))
.build());
final HttpGet httpget = new HttpGet("/");
final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);

View File

@ -34,10 +34,11 @@ import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.KerberosConfig;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.auth.SPNegoScheme;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ClassicHttpRequest;
@ -153,9 +154,9 @@ public class TestSPNegoScheme extends LocalServerTestBase {
final HttpHost target = start();
final AuthSchemeFactory nsf = new NegotiateSchemeFactoryWithMockGssManager();
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials use_jaas_creds = new UseJaasCredentials();
credentialsProvider.setCredentials(new AuthScope(null, null, -1, null, null), use_jaas_creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(null, null, -1, null, null), new UseJaasCredentials())
.build();
final Registry<AuthSchemeFactory> authSchemeRegistry = RegistryBuilder.<AuthSchemeFactory>create()
.register(StandardAuthScheme.SPNEGO, nsf)
@ -184,9 +185,9 @@ public class TestSPNegoScheme extends LocalServerTestBase {
final AuthSchemeFactory nsf = new NegotiateSchemeFactoryWithMockGssManager();
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials use_jaas_creds = new UseJaasCredentials();
credentialsProvider.setCredentials(new AuthScope(null, null, -1, null, null), use_jaas_creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(null, null, -1, null, null), new UseJaasCredentials())
.build();
final Registry<AuthSchemeFactory> authSchemeRegistry = RegistryBuilder.<AuthSchemeFactory>create()
.register(StandardAuthScheme.SPNEGO, nsf)

View File

@ -26,7 +26,6 @@
*/
package org.apache.hc.client5.http.impl.auth;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.hc.client5.http.auth.AuthScope;
@ -63,43 +62,9 @@ public class BasicCredentialsProvider implements CredentialsStore {
credMap.put(authScope, credentials);
}
/**
* Find matching {@link Credentials credentials} for the given authentication scope.
*
* @param map the credentials hash map
* @param authScope the {@link AuthScope authentication scope}
* @return the credentials
*
*/
private static Credentials matchCredentials(
final Map<AuthScope, Credentials> map,
final AuthScope authScope) {
// see if we get a direct hit
Credentials creds = map.get(authScope);
if (creds == null) {
// Nope.
// Do a full scan
int bestMatchFactor = -1;
AuthScope bestMatch = null;
for (final AuthScope current: map.keySet()) {
final int factor = authScope.match(current);
if (factor > bestMatchFactor) {
bestMatchFactor = factor;
bestMatch = current;
}
}
if (bestMatch != null) {
creds = map.get(bestMatch);
}
}
return creds;
}
@Override
public Credentials getCredentials(final AuthScope authScope,
final HttpContext httpContext) {
Args.notNull(authScope, "Authentication scope");
return matchCredentials(this.credMap, authScope);
public Credentials getCredentials(final AuthScope authScope, final HttpContext context) {
return CredentialsMatcher.matchCredentials(this.credMap, authScope);
}
@Override
@ -109,7 +74,7 @@ public class BasicCredentialsProvider implements CredentialsStore {
@Override
public String toString() {
return credMap.toString();
return credMap.keySet().toString();
}
}

View File

@ -0,0 +1,66 @@
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.hc.client5.http.impl.auth;
import java.util.Map;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
final class CredentialsMatcher {
/**
* Find matching {@link Credentials credentials} for the given authentication scope.
*
* @param map the credentials hash map
* @param authScope the {@link AuthScope authentication scope}
* @return the credentials
*
*/
static Credentials matchCredentials(final Map<AuthScope, Credentials> map, final AuthScope authScope) {
// see if we get a direct hit
Credentials creds = map.get(authScope);
if (creds == null) {
// Nope.
// Do a full scan
int bestMatchFactor = -1;
AuthScope bestMatch = null;
for (final AuthScope current: map.keySet()) {
final int factor = authScope.match(current);
if (factor > bestMatchFactor) {
bestMatchFactor = factor;
bestMatch = current;
}
}
if (bestMatch != null) {
creds = map.get(bestMatch);
}
}
return creds;
}
}

View File

@ -0,0 +1,104 @@
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.hc.client5.http.impl.auth;
import java.util.HashMap;
import java.util.Map;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.util.Args;
/**
* {@link CredentialsProvider} builder.
*
* @since 5.2
*/
public final class CredentialsProviderBuilder {
private final Map<AuthScope, Credentials> credMap;
public static CredentialsProviderBuilder create() {
return new CredentialsProviderBuilder();
}
public CredentialsProviderBuilder() {
super();
this.credMap = new HashMap<>();
}
public CredentialsProviderBuilder add(final AuthScope authScope, final Credentials credentials) {
Args.notNull(authScope, "Host");
credMap.put(authScope, credentials);
return this;
}
public CredentialsProviderBuilder add(final AuthScope authScope, final String username, final char[] password) {
Args.notNull(authScope, "Host");
credMap.put(authScope, new UsernamePasswordCredentials(username, password));
return this;
}
public CredentialsProviderBuilder add(final HttpHost httpHost, final Credentials credentials) {
Args.notNull(httpHost, "Host");
credMap.put(new AuthScope(httpHost), credentials);
return this;
}
public CredentialsProviderBuilder add(final HttpHost httpHost, final String username, final char[] password) {
Args.notNull(httpHost, "Host");
credMap.put(new AuthScope(httpHost), new UsernamePasswordCredentials(username, password));
return this;
}
public CredentialsProvider build() {
if (credMap.size() == 0) {
return new BasicCredentialsProvider();
} else if (credMap.size() == 1) {
final Map.Entry<AuthScope, Credentials> entry = credMap.entrySet().iterator().next();
return new SingleCredentialsProvider(entry.getKey(), entry.getValue());
} else {
return new FixedCredentialsProvider(credMap);
}
}
static class Entry {
final AuthScope authScope;
final Credentials credentials;
Entry(final AuthScope authScope, final Credentials credentials) {
this.authScope = authScope;
this.credentials = credentials;
}
}
}

View File

@ -0,0 +1,57 @@
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.hc.client5.http.impl.auth;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.core5.http.protocol.HttpContext;
final class FixedCredentialsProvider implements CredentialsProvider {
private final Map<AuthScope, Credentials> credMap;
public FixedCredentialsProvider(final Map<AuthScope, Credentials> credMap) {
super();
this.credMap = Collections.unmodifiableMap(new HashMap<>(credMap));
}
@Override
public Credentials getCredentials(final AuthScope authScope, final HttpContext context) {
return CredentialsMatcher.matchCredentials(this.credMap, authScope);
}
@Override
public String toString() {
return credMap.keySet().toString();
}
}

View File

@ -0,0 +1,61 @@
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.hc.client5.http.impl.auth;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.util.Args;
final class SingleCredentialsProvider implements CredentialsProvider {
private final AuthScope authScope;
private final Credentials credentials;
public SingleCredentialsProvider(final AuthScope authScope, final Credentials credentials) {
super();
this.authScope = Args.notNull(authScope, "Auth scope");
this.credentials = credentials;
}
public SingleCredentialsProvider(final AuthScope authScope, final String username, final char[] password) {
this(authScope, new UsernamePasswordCredentials(username, password));
}
@Override
public Credentials getCredentials(final AuthScope authScope, final HttpContext context) {
return this.authScope.match(authScope) >= 0 ? credentials : null;
}
@Override
public String toString() {
return authScope.toString();
}
}

View File

@ -33,12 +33,11 @@ import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
import org.apache.hc.client5.http.async.methods.SimpleRequestBuilder;
import org.apache.hc.client5.http.async.methods.SimpleRequestProducer;
import org.apache.hc.client5.http.async.methods.SimpleResponseConsumer;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.core5.concurrent.FutureCallback;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.message.StatusLine;
import org.apache.hc.core5.io.CloseMode;
@ -49,12 +48,10 @@ import org.apache.hc.core5.io.CloseMode;
public class AsyncClientAuthentication {
public static void main(final String[] args) throws Exception {
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope("httpbin.org", 80),
new UsernamePasswordCredentials("user", "passwd".toCharArray()));
final CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.setDefaultCredentialsProvider(CredentialsProviderBuilder.create()
.add(new HttpHost("httpbin.org", 80), "user", "passwd".toCharArray())
.build())
.build();
httpclient.start();

View File

@ -26,13 +26,12 @@
*/
package org.apache.hc.client5.http.examples;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.io.entity.EntityUtils;
/**
@ -42,12 +41,10 @@ import org.apache.hc.core5.http.io.entity.EntityUtils;
public class ClientAuthentication {
public static void main(final String[] args) throws Exception {
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope("httpbin.org", 80),
new UsernamePasswordCredentials("user", "passwd".toCharArray()));
try (final CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.setDefaultCredentialsProvider(CredentialsProviderBuilder.create()
.add(new HttpHost("httpbin.org", 80), "user", "passwd".toCharArray())
.build())
.build()) {
final HttpGet httpget = new HttpGet("http://httpbin.org/basic-auth/user/passwd");

View File

@ -47,7 +47,7 @@ import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.cookie.BasicCookieStore;
import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
@ -194,7 +194,8 @@ public class ClientConfiguration {
// Use custom cookie store if necessary.
final CookieStore cookieStore = new BasicCookieStore();
// Use custom credentials provider if necessary.
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.build();
// Create global request configuration
final RequestConfig defaultRequestConfig = RequestConfig.custom()
.setCookieSpec(StandardCookieSpec.STRICT)

View File

@ -28,10 +28,9 @@ package org.apache.hc.client5.http.examples;
import org.apache.hc.client5.http.auth.AuthExchange;
import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.auth.DigestScheme;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
@ -54,11 +53,9 @@ public class ClientPreemptiveDigestAuthentication {
final HttpHost target = new HttpHost("http", "httpbin.org", 80);
final HttpClientContext localContext = HttpClientContext.create();
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope(target),
new UsernamePasswordCredentials("user", "passwd".toCharArray()));
localContext.setCredentialsProvider(credentialsProvider);
localContext.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(target, new UsernamePasswordCredentials("user", "passwd".toCharArray()))
.build());
final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd");

View File

@ -27,10 +27,10 @@
package org.apache.hc.client5.http.examples;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
@ -44,18 +44,16 @@ import org.apache.hc.core5.http.io.entity.EntityUtils;
public class ClientProxyAuthentication {
public static void main(final String[] args) throws Exception {
final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope("localhost", 8888),
new UsernamePasswordCredentials("squid", "squid".toCharArray()));
credsProvider.setCredentials(
new AuthScope("httpbin.org", 80),
new UsernamePasswordCredentials("user", "passwd".toCharArray()));
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope("localhost", 8888), "squid", "squid".toCharArray())
.add(new AuthScope("httpbin.org", 80), "user", "passwd".toCharArray())
.build();
final HttpHost target = new HttpHost("http", "httpbin.org", 80);
final HttpHost proxy = new HttpHost("localhost", 8888);
try (final CloseableHttpClient httpclient = HttpClients.custom()
.setProxy(proxy)
.setDefaultCredentialsProvider(credsProvider).build()) {
.setDefaultCredentialsProvider(credsProvider)
.build()) {
final RequestConfig config = RequestConfig.custom()
.build();

View File

@ -38,11 +38,10 @@ import org.apache.hc.client5.http.auth.AuthSchemeFactory;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.ChallengeType;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.BasicScheme;
import org.apache.hc.client5.http.impl.auth.BasicSchemeFactory;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.auth.DigestScheme;
import org.apache.hc.client5.http.impl.auth.DigestSchemeFactory;
import org.apache.hc.client5.http.protocol.HttpClientContext;
@ -103,11 +102,9 @@ public class TestAuthenticationStrategy {
.register(StandardAuthScheme.BASIC, BasicSchemeFactory.INSTANCE)
.register(StandardAuthScheme.DIGEST, DigestSchemeFactory.INSTANCE).build();
context.setAuthSchemeRegistry(authSchemeRegistry);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope("somehost", 80),
new UsernamePasswordCredentials("user", "pwd".toCharArray()));
context.setCredentialsProvider(credentialsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(new AuthScope("somehost", 80), "user", "pwd".toCharArray())
.build());
final List<AuthScheme> authSchemes = authStrategy.select(ChallengeType.TARGET, challenges, context);
Assert.assertNotNull(authSchemes);
@ -139,10 +136,9 @@ public class TestAuthenticationStrategy {
context.setAuthSchemeRegistry(authSchemeRegistry);
context.setRequestConfig(config);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope("somehost", 80),
new UsernamePasswordCredentials("user", "pwd".toCharArray()));
context.setCredentialsProvider(credentialsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(new AuthScope("somehost", 80), "user", "pwd".toCharArray())
.build());
final List<AuthScheme> authSchemes = authStrategy.select(ChallengeType.TARGET, challenges, context);
Assert.assertNotNull(authSchemes);

View File

@ -39,6 +39,7 @@ import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.AuthenticationException;
import org.apache.hc.client5.http.auth.ChallengeType;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.core5.http.HttpHost;
@ -81,10 +82,9 @@ public class TestBasicScheme {
authscheme.processChallenge(authChallenge, null);
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "test", null);
final UsernamePasswordCredentials creds = new UsernamePasswordCredentials("testuser", "testpass".toCharArray());
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "test", null), "testuser", "testpass".toCharArray())
.build();
final HttpRequest request = new BasicHttpRequest("GET", "/");
Assert.assertTrue(authscheme.isResponseReady(host, credentialsProvider, null));
@ -142,10 +142,9 @@ public class TestBasicScheme {
authscheme.processChallenge(authChallenge, null);
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "test", null);
final UsernamePasswordCredentials creds = new UsernamePasswordCredentials("test", TEST_UTF8_PASSWORD.toCharArray());
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "test", null), "test", TEST_UTF8_PASSWORD.toCharArray())
.build();
final HttpRequest request = new BasicHttpRequest("GET", "/");
Assert.assertTrue(authscheme.isResponseReady(host, credentialsProvider, null));

View File

@ -26,18 +26,19 @@
*/
package org.apache.hc.client5.http.impl.auth;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.core5.http.HttpHost;
import org.junit.Assert;
import org.junit.Test;
/**
* Simple tests for {@link BasicCredentialsProvider}.
* Tests for {@link org.apache.hc.client5.http.auth.CredentialsProvider} implementations.
*/
public class TestBasicCredentialsProvider {
public class TestCredentialsProviders {
public final static Credentials CREDS1 =
new UsernamePasswordCredentials("user1", "pass1".toCharArray());
@ -155,4 +156,21 @@ public class TestBasicCredentialsProvider {
Assert.assertEquals(expected, got);
}
@Test
public void testSingleCredentialsProvider() {
final Credentials creds1 = new UsernamePasswordCredentials("name1", "pass1".toCharArray());
final CredentialsProvider credentialsProvider1 = new SingleCredentialsProvider(new AuthScope(null, null, -1, null, null), creds1);
Assert.assertEquals(creds1, credentialsProvider1.getCredentials(new AuthScope(null, null, -1, null, null), null));
Assert.assertEquals(creds1, credentialsProvider1.getCredentials(new AuthScope("http", "someotherhost", 80, "somerealm", StandardAuthScheme.BASIC), null));
final CredentialsProvider credentialsProvider2 = new SingleCredentialsProvider(new AuthScope(null, "somehost", 80, null, null), creds1);
Assert.assertEquals(creds1, credentialsProvider2.getCredentials(new AuthScope(null, null, -1, null, null), null));
Assert.assertEquals(creds1, credentialsProvider2.getCredentials(new AuthScope(null, "somehost", 80, null, null), null));
Assert.assertEquals(creds1, credentialsProvider2.getCredentials(new AuthScope("http", "somehost", 80, "somerealm", StandardAuthScheme.BASIC), null));
Assert.assertNull(credentialsProvider2.getCredentials(new AuthScope(null, "someotherhost", 80, null, null), null));
Assert.assertNull(credentialsProvider2.getCredentials(new AuthScope(null, "somehost", 8080, null, null), null));
}
}

View File

@ -42,10 +42,9 @@ import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.AuthenticationException;
import org.apache.hc.client5.http.auth.ChallengeType;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.MalformedChallengeException;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.HeaderElement;
@ -96,10 +95,9 @@ public class TestDigestScheme {
public void testDigestAuthenticationWithDefaultCreds() throws Exception {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"";
final AuthChallenge authChallenge = parse(challenge);
@ -123,10 +121,9 @@ public class TestDigestScheme {
public void testDigestAuthentication() throws Exception {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"";
final AuthChallenge authChallenge = parse(challenge);
@ -147,10 +144,9 @@ public class TestDigestScheme {
@Test
public void testDigestAuthenticationInvalidInput() throws Exception {
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"";
final AuthChallenge authChallenge = parse(challenge);
@ -169,10 +165,9 @@ public class TestDigestScheme {
public void testDigestAuthenticationWithSHA() throws Exception {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", " +
"nonce=\"f2a3f18799759d4f1a1c068b92b573cb\", " +
@ -196,10 +191,9 @@ public class TestDigestScheme {
public void testDigestAuthenticationWithQueryStringInDigestURI() throws Exception {
final HttpRequest request = new BasicHttpRequest("Simple", "/?param=value");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"";
final AuthChallenge authChallenge = parse(challenge);
@ -221,10 +215,9 @@ public class TestDigestScheme {
public void testDigestAuthenticationNoRealm() throws Exception {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " no-realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"";
final AuthChallenge authChallenge = parse(challenge);
@ -240,10 +233,9 @@ public class TestDigestScheme {
public void testDigestAuthenticationNoNonce() throws Exception {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", no-nonce=\"f2a3f18799759d4f1a1c068b92b573cb\"";
final AuthChallenge authChallenge = parse(challenge);
@ -269,10 +261,9 @@ public class TestDigestScheme {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, realm, null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials(username, password.toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, realm, null), username, password.toCharArray())
.build();
final String challenge=StandardAuthScheme.DIGEST + " realm=\"" + realm + "\", "
+ "nonce=\"" + nonce + "\", "
@ -320,10 +311,9 @@ public class TestDigestScheme {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, realm, null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials(username, password.toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, realm, null), username, password.toCharArray())
.build();
final String challenge=StandardAuthScheme.DIGEST + " realm=\"" + realm + "\", "
+ "nonce=\"" + nonce + "\", "
@ -365,10 +355,9 @@ public class TestDigestScheme {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, realm, null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials(username, password.toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, realm, null), username, password.toCharArray())
.build();
final String challenge=StandardAuthScheme.DIGEST + " realm=\"" + realm + "\", "
+ "nonce=\"" + nonce + "\", "
@ -401,10 +390,9 @@ public class TestDigestScheme {
final HttpRequest request = new BasicHttpRequest("Simple", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, realm, null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials(username, password.toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, realm, null), username, password.toCharArray())
.build();
final String challenge=StandardAuthScheme.DIGEST + " realm=\"" + realm + "\", "
+ "nonce=\"" + nonce + "\", "
@ -452,10 +440,9 @@ public class TestDigestScheme {
public void testDigestNouceCount() throws Exception {
final HttpRequest request = new BasicHttpRequest("GET", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge1 = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\", qop=auth";
final AuthChallenge authChallenge1 = parse(challenge1);
@ -496,11 +483,10 @@ public class TestDigestScheme {
@Test
public void testDigestMD5SessA1AndCnonceConsistency() throws Exception {
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "subnet.domain.com", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final HttpRequest request = new BasicHttpRequest("GET", "/");
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "subnet.domain.com", null), "username", "password".toCharArray())
.build();
final String challenge1 = StandardAuthScheme.DIGEST + " qop=\"auth\", algorithm=MD5-sess, nonce=\"1234567890abcdef\", " +
"charset=utf-8, realm=\"subnet.domain.com\"";
@ -579,10 +565,9 @@ public class TestDigestScheme {
final ClassicHttpRequest request = new BasicClassicHttpRequest("Post", "/");
request.setEntity(new StringEntity("abc\u00e4\u00f6\u00fcabc", StandardCharsets.ISO_8859_1));
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\", " +
"qop=\"auth,auth-int\"";
@ -606,10 +591,9 @@ public class TestDigestScheme {
public void testDigestAuthenticationQopAuthIntNullEntity() throws Exception {
final HttpRequest request = new BasicHttpRequest("Post", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\", " +
"qop=\"auth-int\"";
@ -634,10 +618,9 @@ public class TestDigestScheme {
final ClassicHttpRequest request = new BasicClassicHttpRequest("Post", "/");
request.setEntity(new InputStreamEntity(new ByteArrayInputStream(new byte[] {'a'}), -1, ContentType.DEFAULT_TEXT));
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\", " +
"qop=\"auth,auth-int\"";
@ -661,10 +644,9 @@ public class TestDigestScheme {
public void testParameterCaseSensitivity() throws Exception {
final HttpRequest request = new BasicHttpRequest("GET", "/");
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "-", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "-", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " Realm=\"-\", " +
"nonce=\"YjYuNGYyYmJhMzUuY2I5ZDhlZDE5M2ZlZDM 1Mjk3NGJkNTIyYjgyNTcwMjQ=\", " +
@ -683,10 +665,9 @@ public class TestDigestScheme {
final ClassicHttpRequest request = new BasicClassicHttpRequest("Post", "/");
request.setEntity(new InputStreamEntity(new ByteArrayInputStream(new byte[] {'a'}), -1, ContentType.DEFAULT_TEXT));
final HttpHost host = new HttpHost("somehost", 80);
final AuthScope authScope = new AuthScope(host, "realm1", null);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
final Credentials creds = new UsernamePasswordCredentials("username","password".toCharArray());
credentialsProvider.setCredentials(authScope, creds);
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(host, "realm1", null), "username", "password".toCharArray())
.build();
final String challenge = StandardAuthScheme.DIGEST + " realm=\"realm1\", nonce=\"f2a3f18799759d4f1a1c068b92b573cb\", " +
"qop=\"auth-int\"";

View File

@ -31,6 +31,7 @@ import org.apache.hc.client5.http.auth.AuthCache;
import org.apache.hc.client5.http.auth.AuthExchange;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.protocol.RequestAuthCache;
@ -52,14 +53,13 @@ public class TestRequestAuthCache {
private AuthScope authscope2;
private BasicScheme authscheme1;
private BasicScheme authscheme2;
private BasicCredentialsProvider credProvider;
private CredentialsProvider credProvider;
@Before
public void setUp() {
this.target = new HttpHost("localhost", 80);
this.proxy = new HttpHost("localhost", 8080);
this.credProvider = new BasicCredentialsProvider();
this.creds1 = new UsernamePasswordCredentials("user1", "secret1".toCharArray());
this.creds2 = new UsernamePasswordCredentials("user2", "secret2".toCharArray());
this.authscope1 = new AuthScope(this.target);
@ -67,8 +67,10 @@ public class TestRequestAuthCache {
this.authscheme1 = new BasicScheme();
this.authscheme2 = new BasicScheme();
this.credProvider.setCredentials(this.authscope1, this.creds1);
this.credProvider.setCredentials(this.authscope2, this.creds2);
this.credProvider = CredentialsProviderBuilder.create()
.add(this.authscope1, this.creds1)
.add(this.authscope2, this.creds2)
.build();
}
@Test

View File

@ -35,15 +35,15 @@ import org.apache.hc.client5.http.HttpRoute;
import org.apache.hc.client5.http.RouteInfo;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.ChallengeType;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.classic.ExecChain;
import org.apache.hc.client5.http.classic.ExecRuntime;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.entity.EntityBuilder;
import org.apache.hc.client5.http.impl.TunnelRefusedException;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.BasicScheme;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
@ -238,9 +238,9 @@ public class TestConnectExec {
.build());
final ClassicHttpResponse response2 = new BasicClassicHttpResponse(200, "OK");
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials("user", "pass".toCharArray()));
context.setCredentialsProvider(credentialsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(new AuthScope(proxy), "user", "pass".toCharArray())
.build());
final ConnectionState connectionState = new ConnectionState();
Mockito.doAnswer(connectionState.connectAnswer()).when(execRuntime).connectEndpoint(Mockito.any());
@ -279,8 +279,9 @@ public class TestConnectExec {
.build());
final ClassicHttpResponse response2 = new BasicClassicHttpResponse(200, "OK");
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials("user", "pass".toCharArray()));
final CredentialsProvider credentialsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(proxy), "user", "pass".toCharArray())
.build();
context.setCredentialsProvider(credentialsProvider);
final ConnectionState connectionState = new ConnectionState();

View File

@ -41,7 +41,6 @@ import org.apache.hc.client5.http.auth.ChallengeType;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.classic.ExecChain;
import org.apache.hc.client5.http.classic.ExecRuntime;
import org.apache.hc.client5.http.classic.methods.HttpGet;
@ -49,6 +48,7 @@ import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.entity.EntityBuilder;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.auth.BasicScheme;
import org.apache.hc.client5.http.impl.auth.CredentialsProviderBuilder;
import org.apache.hc.client5.http.impl.auth.NTLMScheme;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.http.ClassicHttpRequest;
@ -211,9 +211,9 @@ public class TestProtocolExec {
.setStream(inStream2)
.build());
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(target), new UsernamePasswordCredentials("user", "pass".toCharArray()));
context.setCredentialsProvider(credentialsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(new AuthScope(target), "user", "pass".toCharArray())
.build());
Mockito.when(chain.proceed(
Mockito.same(request),
@ -257,9 +257,9 @@ public class TestProtocolExec {
authExchange.select(new NTLMScheme());
context.setAuthExchange(target, authExchange);
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(target), new UsernamePasswordCredentials("user", "pass".toCharArray()));
context.setCredentialsProvider(credentialsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(new AuthScope(target), "user", "pass".toCharArray())
.build());
Mockito.when(chain.proceed(
Mockito.same(request),
@ -297,9 +297,9 @@ public class TestProtocolExec {
.setStream(inStream1)
.build());
final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(target), new UsernamePasswordCredentials("user", "pass".toCharArray()));
context.setCredentialsProvider(credentialsProvider);
context.setCredentialsProvider(CredentialsProviderBuilder.create()
.add(new AuthScope(target), "user", "pass".toCharArray())
.build());
Mockito.when(chain.proceed(
Mockito.same(request),