【发布时间】:2014-02-12 20:42:12
【问题描述】:
我正在为 SharePoint 2007 编写使用 CXF 框架(版本:2.7.8)的 SOAP 客户端。我已按照在线文档添加 NTLM 支持here。我让客户端工作并跟踪 HTTP 会话显示正在发送 NTLM 凭据,但是,我仍然收到 401 Unauthorized 响应。
代码:
Lists listService = new Lists();
ListsSoap port = listService.getListsSoap();
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put("use.async.http.conduit", Boolean.TRUE);
Credentials creds = new NTCredentials(USER, PASS, "", DOMAIN);
bp.getRequestContext().put(Credentials.class.getName(), creds);
Client client = ClientProxy.getClient(proxy);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setAutoRedirect(true);
http.setClient(httpClientPolicy);
// Build request and execute
有趣的是,我使用 HTTP PUT for WebDAV 编写了一个类似的客户端,以使用 Apache HTTPClient 库上传文档,并且能够使用 NTLM 成功进行身份验证。此外,我能够使用 SOAPUI 调用我尝试为其构建 Java 客户端的相同 Lists Web 服务,并且它也使用 NTLM 成功进行了身份验证。
我假设 NTLM 的实现在 CXF 和 HTTPClient 之间是不同的。关于我的 CXF 实施有什么问题有什么想法吗?或者我怎样才能让它镜像 HTTPClient 实现?
【问题讨论】:
标签: java sharepoint soap cxf ntlm