Как удалить участника из большой группы ldap-ad, насчитывающей более 1500 участников

Я пытаюсь удалить участника из большой группы ldap Active Directory (AD). Приведенный ниже код удалит участника, если группа небольшая. Однако это не сработает, если он больше, поскольку AD разбивает элементы на несколько атрибутов, связанных с диапазоном.

group.removeMember(person.getFullDn());
ldapTemplate.update(group);

Я попытался получить доступ к этим атрибутам напрямую, используя что-то вроде приведенного ниже. IncrementalAttributesMapper позволяет мне получить список атрибутов членов, связанных с диапазоном, т.е. member;Range=0-1499, и я пытаюсь удалить человека из каждого, но безуспешно. Я не получаю сообщения об ошибке, но человек также не удаляется из группы

DirContextOperations ctx = ldapTemplate.lookupContext(group.getDn());

    IncrementalAttributesMapper<?> attributesMapper = new DefaultIncrementalAttributesMapper("member");
        while (attributesMapper.hasMore()) {

            String[] attributes = attributesMapper.getAttributesForLookup();

            for (String attribute: attributes ) {
                 ldapTemplate.lookup(group.getDn(), attributesMapper.getAttributesForLookup(), attributesMapper);
                    ctx.removeAttributeValue(attribute, person.getDn() );   
                    ldapTemplate.modifyAttributes(ctx);
            }    
        }

Надеюсь, кто-то добился большего успеха в этом. Заранее спасибо!


person moranpw    schedule 30.11.2015    source источник


Ответы (1)


У меня есть решение как опубликовано

Я получал сообщение об ошибке неверный формат атрибута, пока не понял, что BasicAttribute ожидает строковые параметры. Я неправильно передал ему объект Name.

ldapTemplate.modifyAttributes(group.getDn(), new ModificationItem[] {
            new ModificationItem(
                DirContext.REMOVE_ATTRIBUTE,
                new BasicAttribute("member", person.getFullDn().toString() ))
        });
person moranpw    schedule 01.12.2015