我已经使用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."); …Run Code Online (Sandbox Code Playgroud) 我使用Grails + spring-security + LDAP来验证用户身份.验证现在可以正常工作但我需要使用纯文本密码来验证第二个服务.
我尝试了SpringSecurityService属性,但没有包含密码.
我是否必须实现自己的UserDetailsMapper,或者LdapUserDetailsMapper是否也提供从Web表单检索的纯文本密码的映射?