Ho implementato la funzionalità di cambio password utilizzando la sicurezza di primavera ma (principal (UserDetails)) .getPassword()) restituisce null per l'utente connesso.UserDetails getPassword restituisce null in spring security 3.1. Come ottenere la password dell'utente attualmente connesso?
Se ricordo bene, questo funzionava in precedenza in 3.0. È stato modificato in 3.1 in modo che la password corrente dell'utente connesso non possa essere recuperata?
Nel seguente codice sto controllando la password corrente digitata nella password utente dalla pagina web. Sto quindi controllando se la password dell'utente connesso corrisponde alla password digitata. Se lo fa allora voglio impostare oldPasswordMatchNewPassword = true.
Come si implementa questa funzionalità?
@RequestMapping(value = "/account/changePassword.do", method = RequestMethod.POST)
public String submitChangePasswordPage(
@RequestParam("oldpassword") String oldPassword,
@RequestParam("password") String newPassword) {
Object principal = SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
String username = principal.toString();
if (principal instanceof UserDetails) {
username = ((UserDetails) principal).getUsername();
System.out.println("username: " + username);
System.out.println("password: "
+ ((UserDetails) principal).getPassword());
if (((UserDetails) principal).getPassword() != null) {
if (((UserDetails) principal).getPassword().equals(oldPassword)) {
oldPasswordMatchNewPassword = true;
}
}
}
if (oldPasswordMatchNewPassword == true) {
logger.info("Old password matches new password. Password will be updated.");
changePasswordDao.changePassword(username, newPassword);
SecurityContextHolder.clearContext();
return "redirect:home.do";
} else {
logger.info("Old password did not match new password. Password will be not be updated.");
return null;
}
}
Ho messo un paio di sysout() s in modo che possa vedere i valori restituiti. Per il principal ((UserDetails)) .getUsername() Riesco a vedere l'utente loggato corretto. (principal (UserDetails)) .getPassword() restituisce null.
Come ottengo ((UserDetails) principal) .getPassword() questo valore?
Grazie in anticipo!
Questo ha senso. Quindi qual è la migliore pratica per farlo? Non voglio disattivare eraseCredentialsAfterAuthentication perché potrebbe rappresentare un rischio per la sicurezza. Puoi aiutarmi a capirlo? – texasdude11