gpt4 book ai didi

Java - jndi ldap 慢速搜索

转载 作者:行者123 更新时间:2023-12-02 10:35:25 27 4
gpt4 key购买 nike

我们使用 javax.naming.ldap.LdapContext 来连接和查询 openLdap。

问题是我们得到 com.sun.jndi.ldap.LdapSearchEnumeration 作为结果,并且循环它非常慢,比如每秒 5 个 SearchResult。

我也尝试过使用 apache ldap api,并且得到相同的时间,除非我带来较少的属性,但它仍然很慢。要获得 180 个结果,需要 10 秒。

jndi ldap的代码示例:

       Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://aplivolatil....:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=usuarioLector.....");
env.put(Context.SECURITY_CREDENTIALS, "9IVNOaQmEeE");
env.put(Context.BATCHSIZE, "1000");
env.put(Context.REFERRAL, "ignore");
LdapContext contexto;

try {
//contexto = new InitialLdapContext(env, null);
contexto = new InitialLdapContext(env, null);

SearchControls controlesBusqueda = new SearchControls();
String [] attrs = new String [] {"cn"};
controlesBusqueda.setReturningAttributes(attrs);
controlesBusqueda.setSearchScope(1);

NamingEnumeration<SearchResult> resultadosObjetos = contexto.search("cn=usuarios-......",
"(&(objectClass=inetOrgPerson))", controlesBusqueda);


while (resultadosObjetos.hasMore()) {
resultadosObjetos.next();
}

因此,经过调查和多次测试,我们发现将 jndi ldap 环境属性“batchsize”设置为 1000 时,搜索方法会出现相同的延迟,而不是循环结果。这在某种程度上是有道理的,API 可能会在每个 next() 上进行 ldap。但为什么要拖延这么久呢?

rootDN 运行速度超快,1 秒,我用于搜索的用户可能有问题吗?这显然不是 rootDN ?

最佳答案

Apache 有一个他们正在开发的 LDAP API。您可以查看here 。不幸的是,目前文档还不是很充实。 User Guide 上有很多页面。都是空的,但是您可以通过一点直觉和 JavaDocs 的一些帮助来填补空白。 .

即使缺乏好的教程,我以前也使用过这个 API 并且运气很好。我建议至少尝试一下,看看情况是否有所改善。

关于Java - jndi ldap 慢速搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com