java - 带有 NTLM 的 CXF SOAP 客户端到 SharePoint

标签 java sharepoint soap cxf ntlm

我正在使用 CXF 框架(版本:2.7.8)为 SharePoint 2007 编写 SOAP 客户端。我已按照在线文档添加 NTLM 支持 here .我让客户端正常工作并跟踪 HTTP session 显示正在发送 NTLM 凭据,但是,我仍然收到 401 未经授权的响应。

代码:

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

有趣的是,我使用 Apache HTTPClient 库为 WebDAV 使用 HTTP PUT 编写了一个类似的客户端来上传文档,并且能够使用 NTLM 成功进行身份验证。此外,我能够使用 SOAPUI 调用我正在尝试为其构建 Java 客户端的相同列表 Web 服务,并且它也使用 NTLM 成功进行了身份验证。

我假设 NTLM 的实现在 CXF 和 HTTPClient 之间是不同的。关于我的 CXF 实现有什么问题的任何想法?或者我如何才能让它镜像 HTTPClient 实现?

最佳答案

请试试这个方法!

HTTPConduit http = (HTTPConduit)client.getConduit();
AsyncHTTPConduit conduit = (AsyncHTTPConduit)http;
DefaultHttpAsyncClient defaultHttpAsyncClient;
defaultHttpAsyncClient = conduit.getHttpAsyncClient();
defaultHttpAsyncClient.getCredentialsProvider().setCredentials( AuthScope.ANY,
 new NTCredentials( USER,PWD, "", DOM ) );
conduit.getClient().setAllowChunking( false );
conduit.getClient().setAutoRedirect( true );

关于java - 带有 NTLM 的 CXF SOAP 客户端到 SharePoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739141/

相关文章:

javascript - 在 Sharepoint 2013 中启用 CORS

visual-studio-2010 - 沙盒解决方案何时在 Sharepoint 中首选?

php - SoapClient 管理错误/异常

java - Hadoop 给出 AccessControlException

java - 不幸的是,[Beacon Project name] 已经停止

sharepoint - 通过 Office 加载项 (Word JS) 使用 Microsoft Graph 访问 SharePoint

web-services - 使用Groovy从WSDL开始创建SOAP Web服务?

C# SOAP 调用不断返回 500 错误

java - 无法找到/解决 Artifact : Maven error

java - 为什么在连接前两个对象后从多个对象创建字符串失败