我在查找如何將#Ldap用戶關聯到給定組時遇到問題。將Ldap用戶關聯到Java的組
這就是我曾嘗試:
Attributes attrs = new BasicAttributes();
BasicAttribute basicAttrs = new BasicAttribute("objectclass");
basicAttrs.add("top");
basicAttrs.add("person");
BasicAttribute memberOf = new BasicAttribute("memberOf");
memberOf.add("Managers"); // Tried with distinguished name too
memberOf.add("Administrators"); // Tried with distinguished name too
attrs.put(basicAttrs);
attrs.put("cn", user.getLogin());
attrs.put("name", user.getLogin());
attrs.put("login", user.getLogin());
attrs.put("mail", user.getMail());
attrs.put("displayName", user.getDisplayName());
attrs.put("memberOf", memberOf);
try {
ctx.bind("CN=" + user.getLogin() + "," + baseDn, null, attrs);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我也嘗試過使用的專有名稱,如:「CN =經理,OU = <系統名稱>,OU =用戶,OU = <服務器>,DC = com「,但沒有工作。 我認爲它應該在某處引用Ldap組。
但我得到這個錯誤:
javax.naming.directory.InvalidAttributeValueException: Malformed 'memberOf' attribute value; remaining name 'CN=lcarvalho,OU=<system_name>,OU=Users,OU=<server>,DC=com'
at com.sun.jndi.ldap.LdapClient.encodeAttribute(LdapClient.java:951)
at com.sun.jndi.ldap.LdapClient.add(LdapClient.java:999)
at com.sun.jndi.ldap.LdapCtx.c_bind(LdapCtx.java:396)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_bind(ComponentDirContext.java:277)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:197)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:186)
at javax.naming.directory.InitialDirContext.bind(InitialDirContext.java:158)
...
這是除了我的申請行的所有堆棧跟蹤。
我還沒有使用JNDI來使用LDAP,但是如果'person'對象類具有'memberOf'屬性,您是否已經檢入了LDAP服務器?什麼是您正在開發的LDAP服務器?無論如何,你必須爲'memberOf'指定完整的DN。 – hovanessyan
我現在只是爲了測試這個而嘗試了同樣的方法,可以重現問題。 'memberOf'屬性確實存在,並且DN是正確的。但我認爲這裏的主要問題是,將用戶添加到組中應該發生在組對象中,而不是用戶對象(因爲@EJP在下面進一步評論)。 –