我想删除具有多个值的属性,但它会忽略这一点,同时成功删除目录中具有特定值的另一个属性。
Attribute attr1 = new BasicAttribute("fooAttr");
ModificationItem attr1mod = new
ModificationItem(DirContext.REMOVE_ATTRIBUTE,attr1);
Attribute attr2 = new BasicAttribute("barAttr","my value");
ModificationItem attr2mod = new
ModificationItem(DirContext.REMOVE_ATTRIBUTE,attr2);
try{
ldapTemplate.modifyAttributes("cn=myname,dc=example,dc=com", new
ModificationItem[]{attr1mod, attr2mod});
} catch(Exception e) {
//
}
barAttr 会被删除,但多值的 fooAttr 不会被删除。
barAttr 也是多值的,指定的值被删除。我也尝试删除 fooAttr 的指定值,但仍然无法删除 fooAttr 的指定值。我从外部确认 fooAttr 存在于目录中。
ldapTemplate.modifyAttributes 执行成功,不抛出异常。
如何解决这个问题?
我认为要删除特定的属性值,您最好单独为每个值使用
DirContext.REMOVE_ATTRIBUTE
标志,现在,您在代码中对属性 DirContext.REMOVE_ATTRIBUTE
和 attr1
使用 attr2
标志,并且它曾经用于删除整个属性,而不是特定属性值!
类似这样的:
Attribute attr1 = new BasicAttribute("fooAttr", "value1");
ModificationItem attr1mod = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attr1);
Attribute attr2 = new BasicAttribute("barAttr", "my value");
ModificationItem attr2mod = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attr2);
try {
ldapTemplate.modifyAttributes("cn=myname,dc=example,dc=com", new ModificationItem[]{attr1mod, attr2mod});
} catch (Exception e) {
//here handle your exceptions
}