我试图用“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[]
查询的正确实现吗?
答案 0 :(得分:0)
问题是EqualsFilter
(或CompareFilter
的任何其他子类)只需要纯文本字段并对其进行编码以避免注入LDAP代码。
要避免此编码,您可以使用HardcodedFilter
代替。如果您没有实际编码纯文本GUID,如果需要,您可以在搜索之前验证该值以避免任何注入。
如果您想使用objectSID
字段,也可以使用此功能。
ldapTemplate.search("", new HardcodedFilter("(objectGUID=" + myGuid + ")").encode(), new MyGUIDMapper());