有没有办法使用单个 ldap 调用通过 dn 获取多个条目?

问题描述 投票:0回答:1

我有这样的代码:

List<String> dns = ...
List<Entry> entries = new ArrayList<>()
for(dn: dns)
  entries.add(connection.getEntry())

我不喜欢这段代码,因为它进行了 n 次 ldap 调用。

有没有办法重写它以进行单个 Ldap 调用?

ldap ldap-query unboundid-ldap-sdk unboundid
1个回答
0
投票
  • 选项A:如果LDAP服务器支持特殊的“可分辨名称”属性,您可以构造一个匹配多个DN的OR过滤器。例如,Active Directory 支持

    distinguishedName
    ,而 OpenLDAP 和 389ds 支持
    entryDN
    ,因此如果您的服务器是 AD,那么您应该能够编写
    (|(distinguishedName=FOO)(distinguishedName=BAR)(distinguishedName=BAZ))

    (在过滤器中使用 DN 之前不要忘记转义它们 - 似乎您可以使用

    Filter.or(Filter.equals(...), Filter.equals(...), ...)
    让 UnboundId 生成有效的过滤器。)

    不幸的是,这个属性是非标准的。

  • 选项 B:异步发出多个调用。 LDAP 支持动态执行多个操作,因此您可以通过调用

    asyncSearch()
    提交一批约 50 个搜索操作,然后收集结果。

    我认为,您可以提交的待处理操作的确切数量将根据 TCP 窗口大小而有所不同,但 50 应该是一个安全限制,并且仍然是一个显着的性能改进(尤其是在高延迟连接上)。

© www.soinside.com 2019 - 2024. All rights reserved.