在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进行身份验证时所需的类和功能。