Я реализовал функцию изменения пароля с помощью spring безопасности, но ((UserDetails)).getPassword()) возвращает значение null для зарегистрированного пользователя.
Если я правильно помню, это раньше работало в версии 3.0. Было ли это изменено в 3.1, чтобы не удалось получить текущий пароль зарегистрированного пользователя?
В приведенном ниже коде я проверяю текущий пароль, введенный пользователем, с веб-страницы. Затем я проверяю, соответствует ли зарегистрированный пароль пользователя введенному паролю. Если это так, я хочу установить oldPasswordMatchNewPassword = true.
Как реализовать эту функциональность?
@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;
}
}
Я помещаю пару sysout() s, чтобы увидеть возвращаемые значения. Для ((UserDetails) принципала).getUsername() Я могу видеть правильно зарегистрированного пользователя. ((UserDetails)).getPassword() возвращает null.
Как мне получить ((UserDetails) принципал).getPassword() это значение?
Спасибо заранее!