我正在尝试编写一个应用程序,它可以让用户管理 LDAP 系统上的用户。其中一个特点是“忘记密码”功能。
- 用户使用我的应用程序重置他的密码
- 我问了一些安全问题,如果它们是正确的,我会将他重定向到新屏幕 - 新密码屏幕。
- 用户只提供新密码(因为他忘记了旧密码)
- 我使用 admin Context 并重置用户密码(使用
modifyAttributes(..)
)。 - LDAP 系统,设置
pwdReset
为true
指示密码已由管理员更改,必须由用户更改。
现在,我确实想将其设置为 false,因为我不希望用户再次更改他的密码(正如他在上述步骤中所做的那样),所以我明确地将其修改为 false。但我得到错误
javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - Object Class Violation]; remaining name 'cn=XXXX,ou=XXXXOU,O=XXXX'
有什么办法?还有其他选择吗?
作为参考,重置的代码pwdReset
如下:
List<ModificationItem> modsList = new ArrayList<ModificationItem>();
BasicAttribute attribute = new BasicAttribute(ATTR_PASSWORDRESET, "false");
modsList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attribute));
ModificationItem [] modsArr = modsList.toArray(new ModificationItem[modsList.size()]);
modsArr = modsList.toArray(new ModificationItem[modsList.size()]);
this.adminCtx.modifyAttributes(userName, modsArr);
这是我的pwdPolicy