如何从超过1500个成员的大型ldap-ad组中删除成员

时间:2015-11-30 17:11:24

标签: active-directory spring-ldap

我正在尝试从大型ldap Active Directory(AD)组中删除成员。如果组很小,下面的代码将删除该成员。但是,如果它更大,它将无法工作,因为AD将成员分成多个范围相关的属性。

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

我尝试使用下面的内容直接访问这些属性。 IncrementalAttributesMapper 允许我获取范围相关成员属性的列表,即成员;范围= 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);
            }    
        }

希望有人在这方面取得了更大的成功。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我已经获得了解决方案as posted

我收到格式错误的属性错误,直到我意识到BasicAttribute正在期待String参数。我错误地将Name对象传递给它。

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