在Apache HttpClient v5.0上,使用NTLM进行身份验证需要进行一些额外的配置。下面是一个使用NTLM进行身份验证的示例代码:
import org.apache.hc.client5.http.auth.*;
import org.apache.hc.client5.http.auth.authenticator.*;
import org.apache.hc.client5.http.auth.params.AuthPNames;
import org.apache.hc.client5.http.config.*;
import org.apache.hc.client5.http.impl.*;
import org.apache.hc.client5.http.impl.auth.*;
import org.apache.hc.client5.http.impl.auth.win.*;
import org.apache.hc.client5.http.impl.classic.*;
import org.apache.hc.client5.http.protocol.*;
import org.apache.hc.core5.http.*;
import org.apache.hc.core5.http.auth.*;
import org.apache.hc.core5.http.protocol.*;
import org.apache.hc.core5.ssl.*;
import org.apache.hc.core5.util.*;
public class HttpClientNTLMExample {
public static void main(String[] args) throws Exception {
// 创建HttpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
// 配置NTLM认证
AuthSchemeProvider authSchemeProvider = new NTLMSchemeFactory();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new NTCredentials("username", "password", "workstation", "domain"));
// 创建认证上下文
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();
authCache.put(new HttpHost("hostname", 8080, "http"), basicAuth);
HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credentialsProvider);
context.setAuthSchemeRegistry(AuthSchemeRegistryBuilder.create()
.register(AuthSchemes.NTLM, authSchemeProvider)
.register(AuthSchemes.BASIC, new BasicSchemeFactory(StandardCharsets.ISO_8859_1))
.build());
context.setAuthCache(authCache);
// 创建请求
HttpGet httpGet = new HttpGet("http://hostname:8080/api/endpoint");
// 执行请求
CloseableHttpResponse response = httpClient.execute(httpGet, context);
try {
// 处理响应
int statusCode = response.getCode();
HttpEntity entity = response.getEntity();
// ...
} finally {
response.close();
}
} finally {
httpClient.close();
}
}
}
请确保将示例代码中的username
,password
,workstation
,domain
,hostname
和http://hostname:8080/api/endpoint
替换为实际的值。
此外,还需确保在项目中包含以下依赖项:
org.apache.httpcomponents.client5
httpclient5
5.0.4
org.apache.httpcomponents.client5
httpclient5-win
5.0.4
org.apache.hc.core5
httpcore5
5.0.4
org.apache.hc.core5
httpcore5-win
5.0.4
这些依赖项将确保在Windows上使用NTLM进行身份验证时所需的类和功能。