Mam problem ze znalezieniem sposobu powiązania użytkownika #Ldap z daną grupą.Powiąż użytkownika Ldap z grupą z Javą
To co próbowałem:
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();
}
Próbowałem też używać nazw wyróżniających jak: „cn = Menedżerów, OU = < system_name>, OU = Użytkownicy, OU = < serwerów> DC = com ", ale nie działa. Myślę, że powinno być gdzieś odwołać się do grupy Ldap.
Ale mam ten błąd:
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)
...
To wszystko ślad stosu oprócz moich linii aplikacyjnych.
Nie użyłem JNDI do pracy z LDAP, ale czy sprawdziłeś na swoim serwerze LDAP, czy klasa obiektu "osoba" ma atrybut "memberOf"? Na czym polega serwer LDAP, nad którym pracujesz? W każdym przypadku musisz podać pełną nazwę DN dla "memberOf". – hovanessyan
Próbowałem tego samego teraz tylko ze względu na testowanie tego i mogę odtworzyć problem. istnieje atrybut "memberOf", a nazwa DN jest poprawna. Ale myślę, że głównym problemem jest to, że dodanie użytkownika do grupy powinno nastąpić z obiektu grupy, a nie obiektu użytkownika (tak jak @EJP skomentowano dalej poniżej). –