2014-01-21 2 views
0

Я новичок в использовании 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 неправильным? Или это способ добавить пользователя в группу совершенно неправильно? Или это некоторые подробности, которые я пропускаю?

+0

'cn = GROUP_SKL, ou = role' не является полным DN. Вам нужно предоставить весь DN до корня вашего дерева. То же самое касается DN пользователя. Или еще убедитесь, что 'ldapTemplate' - это точка в дереве, откуда начинаются эти имена. – EJP

+0

У меня есть ldapTemplate с этой базой: ou = main, dc = nr, dc = company, dc = local LdapTemplate не должен быть настроен неправильно, потому что я могу создавать пользователей и изменять атрибуты пользователей, такие как «компания» и т. Д. , – Alexander

ответ

0

Теперь я нашел ошибку.

Все, что мне было нужно, это использовать полный адрес для пользовательского DN. Поэтому я считаю, что атрибут 'member' для группы должен иметь полный адрес. Так как DN будет выглядеть так:

encodedGroupDn = "сп = GROUP_SKL, НУ = роли"

encodedUserDn = «сп = user_dfh, НУ = внешнее, НУ = главный, dc = Н.Р., постоянный ток = компания, dc = местный "

И это работает!

Смежные вопросы