提问人:gstackoverflow 提问时间:7/26/2023 最后编辑:gstackoverflow 更新时间:7/26/2023 访问量:57
有没有办法在ldap api中使用ObjectGuid而不是dn?
Is there way to use ObjectGuid instead of dn in ldap api?
问:
我们有一个使用LDAP协议的应用程序。为此,我们使用 unboundId 库
// ldap
implementation("com.unboundid:unboundid-ldapsdk:6.0.9")
我们发现大多数 api 调用都用作参数。dn
例如:
ldapConnectionPool.getEntry(dn)
但是我们也发现它不是不可变的标识符(如果我们将对象从一个位置移动到另一个位置,或者如果我们重命名它(更改 CN),它可以被更改,但由于多种原因,拥有可变标识符并不好。因此,我们开始寻找不可变标识符,并找到了 objectGuid。dn
但是这里的问题是我找不到任何允许我的方法
- 按 objectGuid 获取条目
我只找到了这种方式,但我不确定性能:
SearchRequest searchRequest = new SearchRequest(
searchBase,
SearchScope.SUB,
Filter.createEqualityFilter("objectGuid", objectGuid)
);
- 从创建请求中提取:
objectGuid
LDAPResult addResult = ldapConnectionPool.add(addRequest)
所以我的问题是:
在我们的应用程序中用作标识符是个好主意吗?性能很重要。objectGuid
乍一看,它看起来真的很有吸引力,但看起来图书馆不是为此而设计的。你觉得怎么样?
答:
1赞
user1686
7/26/2023
#1
这看起来不错;性能应该不是问题。
LDAP实际上一开始就没有“通过DN获取条目”操作 - 在后台,LDAP客户端通过使用SearchScope.BASE和DN作为基础执行搜索来模拟它。所以你在这方面没有改变任何东西;您之前有一个返回 1 个条目的搜索,现在有一个返回 1 个条目的搜索。
objectGUID 属性已编制索引 – 服务器会将搜索查询优化为快速索引查找,并立即检索匹配的条目。为此,它不需要实际扫描整个子树。
评论
0赞
gstackoverflow
7/26/2023
谢谢你的回答。如何从 addResult 中检索 objectGuid ?LDAPResult addResult = ldapConnectionPool.add(addRequest)
0赞
user1686
7/26/2023
你不能 - “添加”结果中没有额外的信息;您必须按其 DN 查找(搜索)新添加的条目。还有其他“控件”(特别是postRead)可以使这成为可能,但只有一些LDAP实现支持它们,因此OpenLDAP可以,但AD则不行。
评论