我正在尝试从大型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);
}
}
希望有人在这方面取得了更大的成功。提前谢谢!
答案 0 :(得分:0)
我已经获得了解决方案as posted
我收到格式错误的属性错误,直到我意识到BasicAttribute正在期待String参数。我错误地将Name对象传递给它。
ldapTemplate.modifyAttributes(group.getDn(), new ModificationItem[] {
new ModificationItem(
DirContext.REMOVE_ATTRIBUTE,
new BasicAttribute("member", person.getFullDn().toString() ))
});