使用Active Directory中的特殊字符获取组名的组属性

时间:2012-03-14 20:12:33

标签: java active-directory attributes jndi

我有一个包含特殊字符的组名。

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)

我试图逃避特殊字符,但这不起作用。知道为什么会出现这个错误吗?

2 个答案:

答案 0 :(得分:0)

这是一个已知的JNDI限制:

  

“如果LDAP条目的名称包含[正斜杠],那么您需要   逃避它(使用反斜杠字符('\'))。“

http://docs.oracle.com/javase/tutorial/jndi/ldap/jndi.html

即。而不是Java String "/",必须在String常量中使用"\\/",而不是。逃避像这样的字符串

distinguishedName = distinguishedName.replace("/", "\\/")

答案 1 :(得分:-1)

我终于找到了解决这个问题的方法。问题在于用户名中的DC。