Spring ldaptemplate无法删除具有多个值的属性

问题描述 投票:0回答:1

我想删除具有多个值的属性,但它会忽略这一点,同时成功删除目录中具有特定值的另一个属性。

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 执行成功,不抛出异常。

如何解决这个问题?

azure-active-directory active-directory ldap spring-ldap
1个回答
0
投票

我认为要删除特定的属性值,您最好单独为每个值使用

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
}
© www.soinside.com 2019 - 2024. All rights reserved.