我有一个包含特殊字符的组名。
CN=IN&T DC Gebnn/Dohn,OU=ABGroups,OU=Hammers,DC=MyCompany,DC=int
我正在尝试使用以下代码获取该组的属性:
String lstrFullGpName = CN=IN&T DC Gebnn/Dohn,OU=ABGroups,OU=Hammers,DC=MyCompany,DC=int;
Attributes groupAttributes = actxDir.getAttributes(lstrFullGpName);
这会引发以下错误:
线程“main”中的异常javax.naming.NamingException:[LDAP:错误 代码1 - 000020D6:SvcErr:DSID-031006CC,问题5012(DIR_ERROR), 数据0];剩余名称'CN = IN& T DC Gebnn / Dohn,OU = ABGroups,OU =锤子,DC = MyCompany的,DC = INT'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3081)
在com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
在com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
在com.sun.jndi.ldap.LdapCtx.c_lookup(LdapCtx.java:1011)
at com.sun.jndi.toolkit.ctx.ComponentContext.c_resolveIntermediate_nns(ComponentContext.java:152)
at com.sun.jndi.toolkit.ctx.AtomicContext.c_resolveIntermediate_nns(AtomicContext.java:342)
at com.sun.jndi.toolkit.ctx.ComponentContext.p_resolveIntermediate(ComponentContext.java:381)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:205)
在com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:121)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:109)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:99)
在LDAPApp.main(LDAPApp.java:68)
我试图逃避特殊字符,但这不起作用。知道为什么会出现这个错误吗?
答案 0 :(得分:0)
这是一个已知的JNDI限制:
“如果LDAP条目的名称包含[正斜杠],那么您需要 逃避它(使用反斜杠字符('\'))。“
http://docs.oracle.com/javase/tutorial/jndi/ldap/jndi.html
即。而不是Java String "/"
,必须在String常量中使用"\\/"
,而不是。逃避像这样的字符串
distinguishedName = distinguishedName.replace("/", "\\/")
答案 1 :(得分:-1)
我终于找到了解决这个问题的方法。问题在于用户名中的DC。