如何使用spring模板从LDAP中删除特定属性

时间:2015-04-12 17:08:27

标签: spring unbind spring-ldap

我使用以下代码进行删除过程:

public void delete(Person p) {
  Name dn = buildDn(p);
  ldapTemplate.unbind(dn);
}

但是使用unbind()方法,它会删除所有属性,但我想只删除LDAP中的特定属性,例如人员的角色。

3 个答案:

答案 0 :(得分:0)

对于属性修改,您应使用DirContextAdapter,如reference documentation中所述。适用于您的要求的部分将是第3.2.2节(更新);要删除属性值,您应该使用removeAttributeValue

答案 1 :(得分:0)

有三种模式:

  • MOD_ADD:这用于添加属性值。如果该属性已存在(并且架构允许多个值),则为新的 将添加值,旧值将保留。
  • MOD_DELETE:如果属性值存在,属性值将被删除。
  • MOD_REPLACE:给定的属性值将替换该属性名称的所有其他值。换句话说,所有旧的值 该属性将被删除,然后将添加此值。

你应该使用MOD_REPLACE

>>> mod_attrs = [ (ldap.MOD_DELETE, 'cn','Francis Bacon') ]
>>> l.modify_s('uid=francis,ou=users,dc=example,dc=com', mod_attrs)
(103, [])
>>>

这将从cn属性中仅删除属性值Francis Bacon。如果不存在此值,则将引发NO_SUCH_ATTRIBUTE异常。否则,该值将被丢弃。

来源:https://www.packtpub.com/books/content/python-ldap-applications-part-3-more-ldap-operations-and-ldap-url-library

答案 2 :(得分:0)

如果你不知道字段值,那么使用None作为这样的值(以@Anouar Mokhtari为例):

mod_attrs = [ (ldap.MOD_DELETE, 'cn', None) ]
l.modify_s('uid=francis,ou=users,dc=example,dc=com', mod_attrs)