Spring Ldaptemplate 2 добавить члена в группу

как лучше всего добавить члена в группу с помощью spring LdapTemplate. Я успешно создал пользователя и удалил пользователя ex. Но я пытаюсь добавить участника, тогда у меня возникает проблема.

Добавить код участника:

public boolean addMemberToGroup(List<String> groupList, User user) {
    boolean isAddedSuccessfully=false;
    try{
        for(int i=0;i<groupList.size();i++){
            Name groupDn = buildGroupDn(groupList.get(i));
            DirContextOperations ctx =   ldapTemplate.lookupContext(groupDn);
            ctx.addAttributeValue("member",buildPersonDn(user.getUid()));
            ldapTemplate.update(ctx);
            }
        isAddedSuccessfully=true;
    }
    catch(Exception e){
        isAddedSuccessfully=false;

    }
    return isAddedSuccessfully;
}

private Name buildGroupDn(String groupName) {
    return LdapNameBuilder.newInstance("cn=groups").add("cn", groupName).build();
}

private Name buildPersonDn(String userID) {
    return LdapNameBuilder.newInstance()
        .add("uid", userID).add("cn", "users")
        .build();

}

Исключение для addMemberToGroup: класс класса org.springframework.ldap.core.DirContextAdapter должен иметь аннотацию интерфейса уровня класса org.springframework.ldap.odm.annotations.Entry.

пожалуйста, дайте мне знать, что мне не хватает.


person Janu Nadeem    schedule 10.02.2015    source источник


Ответы (2)


updatemethod предназначен для использования с ODM. аннотированные классы. При работе с DirContextAdapter следует использовать modifyAttributes.

person marthursson    schedule 11.02.2015

Хотя это старый вопрос, он у меня был слишком недавно. Для всех, кто придет сюда в будущем, этот вопрос аналогичен вопросу, найденному в Spring Malformed 'member' значение атрибута. Собрав информацию из обоих вопросов, я нашел решение своей проблемы и делюсь здесь тем, что сработало для меня.

В дополнение к использованию метода modifyAttributes класса LdapTemplate также важно передавать объект String в качестве второго параметра метода addAttributeValue класса DirContextOperations при добавлении члена, а не передавать объект Name. Метод toString, вызываемый для соответствующего объекта Name, делает свое дело.

Оригинальный код:

DirContextOperations ctx = ldapTemplate.lookupContext(groupDn);
ctx.addAttributeValue("member",buildPersonDn(user.getUid()));
ldapTemplate.update(ctx);

Попробуйте это вместо этого:

DirContextOperations ctx = ldapTemplate.lookupContext(groupDn);
ctx.addAttributeValue("member",buildPersonDn(user.getUid()).toString());
ldapTemplate.modifyAttributes(ctx);
person Michael K. Eidson    schedule 29.04.2019