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 具有相同的语义。没有测试和这个改变你不可能得到这个问题。
再见,
正在开发一种工具,让用户可以更改密码(已生成)。我在使用 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 具有相同的语义。没有测试和这个改变你不可能得到这个问题。