我已经使用 spring security 实现了更改密码功能,但是 ((UserDetails) principal).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() 以便我可以看到返回的值。对于 ((UserDetails) principal).getUsername() 我可以看到正确的登录用户。((UserDetails) principal).getPassword() 它返回 null。
如何获得 ((UserDetails) principal).getPassword() 这个值?
提前致谢!