Spring搜索“ObjectGUID”

时间:2017-02-05 03:14:46

标签: java spring active-directory ldap uuid

我试图用“objectGUID”查询我的ldapTemplate为 -

SELECT DISTINCT 
    A.id
FROM
    newtable A
INNER JOIN 
    newtable B ON A.id = B.id
WHERE
    A.valB = B.valB AND
    A.valC = B.valC

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

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。但是在查询ldapTemplate时我没有得到任何结果。

这是byte[]查询的正确实现吗?

1 个答案:

答案 0 :(得分:0)

问题是EqualsFilter(或CompareFilter的任何其他子类)只需要纯文本字段并对其进行编码以避免注入LDAP代码。

要避免此编码,您可以使用HardcodedFilter代替。如果您没有实际编码纯文本GUID,如果需要,您可以在搜索之前验证该值以避免任何注入。

如果您想使用objectSID字段,也可以使用此功能。

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