我正在尝试使用Unboundid LDAP SDK获取所有groupOfUniqueNames对象的名称。我能够做到这一点,但如果服务器有很多条目,则会出现问题。设置响应超时似乎被忽略,程序只是挂起(等待大响应),而不是在5000毫秒后终止。
我已经明白我可以使用分页一次返回一定数量的用户,但是,我担心为什么超时不起作用。
SearchResult searchResult;
Filter filter =
Filter.createEqualityFilter("objectClass", "groupOfUniqueNames");
try {
SearchRequest searchRequest = new SearchRequest(baseDN, SearchScope.SUB, filter, "uniqueMember", "member");
searchRequest.setResponseTimeout(5000);
System.out.println(searchRequest.getResponseTimeout(connection)); // prints 5000
searchResult = connection.search(searchRequest);
} catch(LDAPSearchException e) {
e.printStackTrace();
}
for (SearchResultEntry entry : searchResult.getSearchEntries()) {
String name = entry.getDN();
System.out.println(name);
}
令我感到困惑的是,上面的代码将永远挂起,但我还有其他正常超时的搜索(错误85 - 客户端超时)。
这个特定查询忽略客户端超时的原因是什么?文档here使得听起来无论如何,在5000毫秒之后程序将停止等待响应。
谢谢
答案 0 :(得分:0)
尝试同步模式 I.e.在连接到服务器之前执行此操作:
connectionOptions.setUseSynchronousMode(true);
// more options
connection.setConnectionOptions(connectionOptions);
答案 1 :(得分:0)
我遇到了类似的问题:
LDAP Error Code 85 - A client-side timeout was encountered
在我的情况下,我必须为LDAP连接配置SSL。 例如,将此视为临时实现:
SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
SSLSocketFactory sslSocketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(sslSocketFactory);
https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/util/ssl/SSLUtil.html
我认为关于"超时"在这种情况下非常混乱。