Spring LDAP 通过“ObjectGUID”搜索

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

我正在尝试使用“objectGUID”作为 -

查询我的 ldapTemplate
String myGuid = "\\00\\B2\\15\\6C\\7D\\1B\\4B\\C8\\BF\\87\\C5\\36\\86\\A8\\B0\\16";
List<Object> attributes =  ldapTemplate.search("", new EqualsFilter("objectGUID", myGuid).encode(), new MyGUIDMapper());

我的基本环境设置映射为 -

<beans:entry key="java.naming.ldap.attributes.binary" value="objectGUID objectSid"/>

这能够将

objectGUID
获取为
byte[]
。但是在查询 ldapTemplate 时我没有得到任何结果。

这是通过

objectGUID
进行查询的正确实现吗?

java spring active-directory ldap uuid
2个回答
1
投票

问题在于

EqualsFilter
(或
CompareFilter
的任何其他子类)仅期望纯文本字段并对它们进行编码以避免 LDAP 代码注入。

要避免这种编码,您可以使用

HardcodedFilter
代替。如果需要,您可以在搜索之前验证该值,以避免任何注入(如果您实际上没有自己对纯文本 GUID 进行编码)。

如果您想使用

objectSID
字段,这也适用。

ldapTemplate.search("", new HardcodedFilter("(objectGUID=" + myGuid + ")").encode(), new MyGUIDMapper());

0
投票

这可能是因为您的十六进制字符串是大写的。最近,我一直在尝试同样的方法,看来这里的外壳很重要。

请尝试使用小写格式。希望有帮助

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