如何使用ldaptemplate删除操作属性

时间:2014-01-06 08:43:03

标签: java spring ldap openldap spring-ldap

我需要从名为pwdAccountLockedTime

的政策覆盖中删除操作属性

我跟着this Q&A建议使用方式2:

直接使用LdapTemplate#modifyAttributes(Name, ModificationItem[]),手动构建ModificationItem数组。

这是我的代码:

Name dn = buildDn(user);
DirContextOperations context = ldapTemplate.lookupContext(dn);
ModificationItem[] modificationItems;
modificationItems = new ModificationItem[1];
modificationItems[0] = new ModificationItem(DirContextAdapter.REMOVE_ATTRIBUTE,
                                            new BasicAttribute(
                                                 "pwdAccountLockedTime", dn));
ldapTemplate.modifyAttributes(dn,modificationItems);

我检查了用户,那个属性仍然存在。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

如果要删除pwdAccountLockedTime属性,则在配置LDAP时必须指定管理员凭据。用户无权删除操作属性。您可以参考以下代码。

       Name dn = buildDn(pvo);

       DirContextOperations context = ldapTemplate.lookupContext(dn);
       ModificationItem[] modificationItems;
       modificationItems = new ModificationItem[1];


       modificationItems[0] =new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("pwdAccountLockedTime"));

   ldapTemplate.modifyAttributes(dn,modificationItems);

注意:buildDn()是一个单独的方法。

  protected Name buildDn(PersonVo p) {
    return LdapNameBuilder.newInstance(BASE_DN)
      .add("","")    // add your root
      .add("", "")    // add your root
      .add("cn", p.getFullname())
      .build();
  }

我正在从邮递员那里获取PersonVo对象,因为我正在构建Dn。

这是配置代码

@配置 公共类Config {

@Bean
public LdapContextSource ldapContextSource()
{
    LdapContextSource lcs= new LdapContextSource();
    lcs.setUrl("Your url");
    lcs.setUserDn("yourDn");
    lcs.setPassword("yourpassword");
    return lcs;
}   

}

如果您不指定管理员凭据,则此代码无效

答案 1 :(得分:0)

你没有。操作属性适用于LDAP服务器,而不适用于应用程序。它们对应用程序是只读的。

但是,管理员帐户可以更改此特定属性。改变它的唯一方法是锁定到期。否则only a password administrator can unlock the account:见#5.3.3。

答案 2 :(得分:0)

您的意图似乎是解锁已被OpenLdap中的错误密码尝试过多锁定的帐户。

如果用户帐户被锁定(pwdLockout为TRUE),则可能使用以下任一过程unlocked by an administrator

删除操作属性pwdAccountLockedTime。此过程允许用户继续使用当前密码,仅在密码未过期时才有效。

添加操作属性pwdReset,其值为TRUE或FALSE。 FALSE仅在密码未过期且与删除pwdAccountLockedTime具有相同效果时才有效。

在大多数openLDAP版本中,您可以删除pwdAccountLockedTime。

某些版本可能需要使用ManageDIT控件。假设您拥有适当的权限,这两个都可以。

根据rfc4512第3.4节,“并非所有操作属性都是用户可修改的。”

-Jim