Vytvořil jsem koncový bod pro aktualizaci hesla uživatele, který je uvnitř naše služby Active Directory pomocí serveru LDAP na Jaře. Nemám problém měnit to bez kontroly v případě, že předchozí heslo zápasy, ale musím nějak zkontrolovat, že předchozí heslo je stejné jako ten v současné době v aktivním adresáři.
Můj kód je dávat mi tato chybová právě teď:
LDAP: error code 19 - 0000216C: AtrErr: DSID-03190F1E,
#1:\n\t0: 0000216C: DSID-03190F1E, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd)
Moje heslo aktualizovat kód je následující:
public void updateUserPassword(User user,String oldPassword, String newPassword) throws NameNotFoundException, UnsupportedEncodingException {
Attribute oldattr = new BasicAttribute("unicodePwd", toUnicodeBytes(oldPassword);
Attribute newattr = new BasicAttribute("unicodePwd", toUnicodeBytes(newPassword);
ModificationItem olditem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, oldattr);
ModificationItem newitem = new ModificationItem(DirContext.ADD_ATTRIBUTE, newattr);
ldapTemplate.modifyAttributes(buildDn(user), new ModificationItem[] { olditem, newitem });
}
public static byte[] toUnicodeBytes(String password){
String quotedPassword = "\"" + password + "\"";
char unicodePwd[] = quotedPassword.toCharArray();
byte pwdArray[] = new byte[unicodePwd.length * 2];
for (int i = 0; i < unicodePwd.length; i++)
{
pwdArray[i * 2 + 1] = (byte) (unicodePwd[i] >>> 8);
pwdArray[i * 2 + 0] = (byte) (unicodePwd[i] & 0xff);
}
return pwdArray;
}
Následující kód funguje, ale chci ověřit, že předchozí heslo je správné, tak to nemůžu použít.
public void updateUserPassword(User user,String oldPassword, String newPassword) throws NameNotFoundException, UnsupportedEncodingException {
Attribute attr = new BasicAttribute("unicodePwd",toUnicodeBytes(newPassword));
ModificationItem item = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attr);
ldapTemplate.modifyAttributes(buildDn(user), new ModificationItem[] { item });
}
Nějaké nápady, jak problém vyřešit? Díky předem.