【发布时间】:2011-08-10 10:23:07
【问题描述】:
这里的问题是在客户端使用 Apache HttpClient 时使用具有 NTLM 身份验证的 Web 资源。我遇到的问题是强制客户端使用 NTLM 身份验证。这是一个代码示例。
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getAuthSchemes().register("ntlm",new NTLMSchemeFactory());
NTCredentials creds = new NTCredentials("_myUSer_","_myPass_","_myWorkstation_","_myDomain_");
httpclient.getCredentialsProvider().setCredentials( new AuthScope("serverName",80), creds);
List<String> authpref = new ArrayList<String>();
authpref.add(AuthPolicy.NTLM);
httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF, authpref);
HttpHost target = new HttpHost("serverName", 80, "http");
HttpGet httpget = new HttpGet("webResource");
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpclient.execute(target, httpget, localContext);
这是来自 Java 的错误:
org.apache.http.client.protocol.RequestTargetAuthentication process
SEVERE: Authentication error: Invalid name provided (Mechanism level: Could not load configuration file C:\WINDOWS\krb5.ini (The system cannot find the file specified))
网络服务器响应是401。
关于为什么没有正确设置身份验证策略的任何想法? 我在代码中遗漏了什么吗?
【问题讨论】:
-
我发现我的代码有一个问题,那就是 AuthScope 应该指向您的代理而不是您的目标,这确实消除了尝试使用 Kerberos 而不是 NTLM 的错误,但是我仍然从服务器收到 401,关于正确的用户名/密码/域组合的任何想法?
-
HttpClient需要更新查看我的帖子[stackoverflow.com/questions/5917356/…[1]:stackoverflow.com/questions/5917356/…
标签: java ntlm apache-httpclient-4.x