Я новичок в использовании Ldap API для Java, и я хочу добавить пользователя в группу, но я терпеть неудачу все время.Невозможно добавить пользователя в группу с Ldap в Java
Я использую этот код для добавления конкретного пользователя к определенной группе:
private void insertUserToGroup(List<DistinguishedName> memberOf, DistinguishedName newUserDN) {
try
{
// Loop all groups to put the user in.
for(DistinguishedName groupDn : memberOf) {
String encodedGroupDn = groupDn.encode(); // Example: "cn=GROUP_SKL, ou=roles"
String encodedUserDn = newUserDN.encode(); // Example: "cn=user_dfh, ou=external"
// Now. Add user to a group.
ModificationItem member[] = new ModificationItem[1];
member[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", encodedUserDn));
ldapTemplate.modifyAttributes(encodedGroupDn, member);
}
} catch (InvalidAttributeValueException exc) {
throw exc;
} catch (NameAlreadyBoundException exc) {
throw exc;
} catch (NameNotFoundException exc) {
throw exc;
} catch (Exception exc) {
throw exc;
}
}
Входные аргументы в список групп и пользователей, и вы можете видеть в примере комментарии, как DistinguishedName будет выглядеть.
1. И исключение, которое я получаю при запуске ldapTemplate.modifyAttributes (encodedGroupDn, member); является:
org.springframework.ldap.NameNotFoundException: [Код ошибки 32 - 00000525: LDAP NameErr: DSID-031A11CC, проблема 2001 (NO_OBJECT), данные 0, лучший матч: '' ];
вложенной исключение javax.naming.NameNotFoundException: [LDAP: код ошибки 32 - 00000525: NameErr: DSID-031A11CC, проблема 2001 (NO_OBJECT), данные 0, лучший матч: '' ];
остального имя 'сп = GROUP_SKL, НУ = роли'
2. я пытался запустить modifyAttributes (...) с другими атрибутами, такими как "описание", "компания" и что работает как для групп, так и для пользователей, но не для атрибута «member».
3. Так что вопрос. Какое имя оно ожидает? Является ли DistinguishedName неправильным? Или это способ добавить пользователя в группу совершенно неправильно? Или это некоторые подробности, которые я пропускаю?
'cn = GROUP_SKL, ou = role' не является полным DN. Вам нужно предоставить весь DN до корня вашего дерева. То же самое касается DN пользователя. Или еще убедитесь, что 'ldapTemplate' - это точка в дереве, откуда начинаются эти имена. – EJP
У меня есть ldapTemplate с этой базой: ou = main, dc = nr, dc = company, dc = local LdapTemplate не должен быть настроен неправильно, потому что я могу создавать пользователей и изменять атрибуты пользователей, такие как «компания» и т. Д. , – Alexander