我正在为SharePoint 2007编写一个使用CXF框架(版本:2.7.8)的SOAP客户端。我在这里按照在线文档添加了NTLM支持。我让客户端工作,跟踪HTTP会话显示正在发送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
有趣的是,我使用HTTP PUT for WebDAV编写了一个类似的客户端,使用Apache HTTPClient库上传文档,并且能够使用NTLM成功地进行身份验证。此外,我能够使用SOAPUI来调用我正在尝试构建的Java客户端的同一个列表web服务,并且它也成功地使用NTLM进行了身份验证。
我假设CXF和HTTPClient之间的NTLM实现不同。对我的CXF实施有什么问题吗?或者如何让它镜像HTTPClient实现?
这对我很有效:
Client client = ClientProxy.getClient(port);
AsyncHTTPConduit conduit = (AsyncHTTPConduit)client.getConduit();
AuthorizationPolicy authorization = conduit.getAuthorization();
authorization.setUserName("domain\\username");
authorization.setPassword("password");
实际上,这适用于 NTLM 和基本
@lamarvannoy,我也得到了这个错误。但我找到了另一种方法。您不需要将 HTTPConduit 强制转换为异步HTTP接口。让我们试试这个东西:
public class Test {
static final String kuser = "yourDomain\\username";
static final String kpass = "yourPassword";
static class MyAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
System.err.println("Feeding username and password for " + getRequestingScheme());
return (new PasswordAuthentication(kuser, kpass.toCharArray()));
}
}
public static void main(String[] args) throws Exception {
Authenticator.setDefault(new MyAuthenticator());
Lists listService = new Lists();
ListsSoap port = listService.getListsSoap();
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
String listName = "S030_main";
String rowLimit = "150";
ArrayList<String> listColumnNames = new ArrayList<String>();
listColumnNames.add("Title");
Test.displaySharePointList(port, listName, listColumnNames, rowLimit);
}
}
您可以在这篇文章中找到displaySharePointList()方法的实现:http://davidsit.wordpress.com/2010/02/10/reading-a-sharepoint-list-with-java-tutorial/
我希望这能保证你和其他人的时间。
请试试这条路!
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 );
问题内容: 我需要连接到通过REST接口提供JSON的端点。我真的找不到以一致的方式将这两种技术结合在一起的东西。 我正在寻找一个可以让我快速入门的图书馆。 问题答案: 您可以使用Json.Net库,这个扩展类是利用了 一些用法示例: 编辑: 这是另一个没有
我有一个来自http工具包的Websocket连接(Clojure,它工作得很好)。我从客户端发送ping以确保我们仍然保持连接,并且在那里一切正常。我的问题是,在这种情况下,人们是否会从服务器ping客户端? 我试图设置一些东西,如果我没有得到响应,就从服务器上删除频道,但是设置定时进程和改变状态来跟踪乒乓周期不是很方便,所以它变得有点难看。然后我就想,服务器能处理几十万个同时连接,我是不是就应
问题内容: 我有一个Java客户端,它使用通过JDK 6的JAX-WS实现编写的SharePoint 2010标准Web服务(sitedata.asmx,Permissions.asmx等)。 到目前为止,使用自定义实现和方法对NTLM进行身份验证。 在只有一台SharePoint服务器的测试环境中运行时,它可以正常工作。我可以看到所有使用WireShark进行的NTLM协商。 但是,如果在具有多
我正在使用具有以下配置的Redisson连接到哨兵服务器:
null 有人能帮帮我吗?谢谢。 代码 斯塔克特莱斯
我正在开发一个简单的聊天服务,该服务由Spring Boot 2.1.1运行,WebFlux、Reactor 3.2.3、Mongo 3.8.2和Netty 4.1.31。 null 观察似乎很明显,因为当我在测试期间通过SSE连接时,当新事件到达时,它几乎立即更新我--基本上,SSE的响应比每2秒轮询高数百倍。 问题是: 假定客户机最终是订阅者(或者至少我认为它是由有限的知识提供的),我能以某种