spring-ldap 自动获取操作字段

spring-ldap auto fetch operational fields

再见,

正在开发一种工具,让用户可以更改密码(已生成)。我在使用 Spring Ldap (2.1.0.RELEASE).

时遇到了一个小问题

现在我们要设置一些操作属性。这是我使用的代码:

  public void updatePassword(LdapUser ldapUser) {
    String[] userOrg = ldapUser.getUserName().split("@");
    Name dn = buildDn(userOrg[1], ldapUser.getUserName());
    DirContextOperations context = ldapTemplate.lookupContext(dn);
    context.setAttributeValue(USER_PASSW, ldapUser.getUserPassword());
    if(!context.attributeExists("pwdReset")) {
      context.setAttributeValue("pwdReset", "TRUE");
    }
    ldapTemplate.modifyAttributes(context);
  }

现在,只要从未设置操作属性 pwdReset,这段代码就可以正常工作。但是如果它曾经被设置过(因此值为 FALSE)。可以得到错误码:

LDAP: error code 20 - modify/add: pwdReset: value #0 already exists

现在我知道 Ldap 的设计不会返回操作属性。但是 Spring Ldap 中必须有一种方法可以告诉它您总是希望也具有操作属性。

Anny sugestions 会很好。

你测试错了。无论如何,测试存在是没有意义的。您应该测试它是否已设置为 TRUE,并且仅在未设置时才进行设置。

实际上你应该删除测试,因为测试和套装一样昂贵。我还建议不要将其设置为 FALSE,而是完全删除该属性,这与 FALSE 具有相同的语义。没有测试和这个改变你不可能得到这个问题。