在 389 DS 下,我们设置了密码策略,将最后 5 个密码保存在历史记录中,这样就不能使用了。
我们有 java 应用程序,在该应用程序下,密码被更改为 LDAP 管理员。但是,当密码更改而不是在密码历史记录中添加新密码时,它会用新密码替换旧密码。这使用户能够将密码更改为过去使用的密码。
例如。
- 用户设置密码为 abc,则历史为 {abc}。
- 用户将密码更改为 efg,则历史记录为 { abc, efg }
- 管理员将密码更改为 xyz,则历史记录应为 {xyz, abc, efg} 但它是 {xyz, efg}。
private static void changePasswordAsAdmin(String userDn, String sNewPassword) throws Exception {
System.out.println("Setting Password:" + sNewPassword);
LDAPConnection connection = new LDAPConnection(new MySSLSocketFactory(), "Ldap host", 636, "adminCN", "adminPwd" );
final List mods = new ArrayList();
final Modification item = new Modification(ModificationType.REPLACE, "userPassword", sNewPassword);
mods.add(item);
final ModifyRequest request = new ModifyRequest(userDn, mods);
try {
LDAPResult result = connection.modify(request);
System.out.println(result.getResultString());
}
catch(Exception e) {
System.out.println(e.getMessage());
throw e;
}
}
private static void changePasswordAsUser(String userDn, String oldPassword, String newPassword) throws Exception {
System.out.println("Setting Password, old password: " + oldPassword + ", new password: " + newPassword);
LDAPConnection connection = new LDAPConnection(new MySSLSocketFactory(), "ldapHost", 636, "userDn", "oldPassword");
final List mods = new ArrayList();
final Modification item = new Modification(ModificationType.REPLACE, "userPassword", newPassword);
mods.add(item);
final ModifyRequest request = new ModifyRequest(userDn, mods);
try {
LDAPResult result = connection.modify(request);
System.out.println(result.getResultString());
}
catch(Exception e) {
System.out.println(e.getMessage());
}
}