我正在使用 java ldap 访问活动目录,更具体地说是 spring ldap。当过滤器按照 rfc2254 中的指定进行编码时,按 objectGUID 进行的组搜索不会产生任何结果。
这是其十六进制表示形式的指南:
\49\00\f2\58\1e\93\69\4b\ba\5f\8b\86\54\e9\d8\e9
spring ldap 像这样对过滤器进行编码:
(&(objectClass=group)(objectGUID=\5c49\5c00\5cf2\5c58\5c1e\5c93\5c69\5c4b\5cba\5c5f\5c8b\5c86\5c54\5ce9\5cd8\5ce9))
如rfc2254和 microsoft technet中所述:
该字符必须编码为反斜杠 '' 字符 (ASCII 0x5c),后跟表示编码字符的 ASCII 值的两个十六进制数字。两个十六进制数字的大小写无关紧要。块引用
所以反斜杠应该是 '\5c'
但我没有得到来自 AD 的上述过滤器的结果。另外,如果我将该过滤器放在 AD 管理控制台自定义过滤器中,它也不起作用。当我从过滤器中删除 5c 时,它可以在 java 和 AD 控制台中使用。
我在这里错过了什么吗?
当然,我可以在没有 5c 的情况下对过滤器进行编码,但我不确定它是否正确,我更喜欢让 spring 对过滤器进行编码,因为它知道很多我应该手动完成的事情。