Java 如何转义ldap查询中的特殊字符?

Java 如何转义ldap查询中的特殊字符?,java,active-directory,ldap,Java,Active Directory,Ldap,我在LDAP上有一个名为base DN的用户 =CN=abc def\, ghi,CN=jkl,DC=mno,DC=pqr 密码是xyz 我想在ldap中搜索这个用户,我该怎么做?有一点很清楚,LDAP查询应该是这样的 CN=abc def\\\, ghi\,CN=jkl\,DC=mno\,DC=pqr,xyz 尝试了这些解决方案 .getBindUserDN().replaceAll("[,]", "\\\\\\,").getBindUserDN().replaceAll(",", "\\

我在LDAP上有一个名为base DN的用户

=CN=abc def\, ghi,CN=jkl,DC=mno,DC=pqr
密码是
xyz

我想在ldap中搜索这个用户,我该怎么做?有一点很清楚,LDAP查询应该是这样的

CN=abc def\\\, ghi\,CN=jkl\,DC=mno\,DC=pqr,xyz
尝试了这些解决方案

.getBindUserDN().replaceAll("[,]", "\\\\\\,").getBindUserDN().replaceAll(",", "\\,")

等等。这里的逻辑应该是什么?

我找到了解决方案,但它非常特殊于这种情况,我们只指定一个反斜杠
\
和一个逗号
,即
\,

问题是,当我试图搜索ldap条目时,我直接获取了
Bind DN
的值。后来经过反复试验的方法,我了解到当我搜索它的密钥时,我们需要6个反斜杠,即
来查找它的密钥,因为LDAP使用3个反斜杠和逗号
\\,
来存储它

但当我要在Ldap中查找这个密钥时,现在我需要用这个新密钥搜索,这意味着应该有6个反斜杠。所以我必须用两倍于这些反斜杠的数字来搜索它,即12


PS:-此解决方案适用于非常特殊的情况。但是如果有人需要以不同的方式应用它,那么逻辑应该是类似的

需要转义的内容取决于您在其中使用它的上下文。您是如何使用此值的?我正在指定此值并在MS-AD中搜索CN=abc def\。但它总是说找不到该用户。您是如何“指定此值并搜索”的?您能显示该代码吗?很抱歉,该代码不允许显示,但我发现了问题。我从未见过任何需要超过2个反斜杠的情况(一个用于转义DN中的逗号,另一个用于转义代码中的逗号)。我不知道你在做什么,但几乎可以肯定有更好的方法。你看,如果你在MS-AD中创建一个用户作为
Abc\,xyz
,那么MS-AD将其存储为
Abc\\\,xyz
,因此当我必须在LDAP目录中查找它的密钥时,我必须使用
Abc\\\\,的keyaliaas来搜索它,xyz
。我知道CN是否有
它将其存储为DN中的
。但是你是说你在CN里真的有
?为什么?因为MS-AD不允许使用单逗号,因为它是保留字符。为了避免使用逗号,微软建议使用
\,
我们在CN中始终使用一个逗号(我指的是
CN
属性),AD会自动将
\,
放在DN中。