我正在尝试使用“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查询的正确实现吗?

最佳答案

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

为了避免这种编码,您可以改用HardcodedFilter。如果需要,您可以在搜索之前先验证该值,以免注入任何内容,前提是您自己实际上并未对纯文本GUID进行编码。

如果要使用objectSID字段,这也可以使用。

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

关于java - 通过“ObjectGUID”进行Spring LDAP搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42048173/

10-10 15:07