如何解决spring boot 使用 BcryptPasswordEncoder ,密码不匹配
Spring Boot 应用程序,用户登录后想修改密码,但功能没有修改密码。
@PostMapping("/settings/passwordupdate")
public String PasswordUpdate(@RequestParam("oldPassword") String oldPassword,@RequestParam("newPassword") String newPassword,Principal principal) {
String userName = principal.getName();
User currentUser = serviceUserDetail.findByUserName(userName);
final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
System.out.println(newPassword + " |||| " + passwordEncoder.encode(currentUser.getpassword()));
if (passwordEncoder.matches(oldPassword,passwordEncoder.encode(currentUser.getpassword()))) {
System.out.print("match");
} else {
System.out.print("not match");
}
return "redirect:/";
}
结果是
pass |||| $2a$10$Y3JMpBg/3l4SHJY/X8XRS.O3vLxr64iLLoLY3r933irwsnrvCIr2q
not match---------------
虽然我可以通过密码“pass”登录,这意味着密码是ok的
解决方法
您无法将新密码与重新编码的旧密码匹配。 您可以将参数中的旧密码与当前密码进行匹配。
你可以这样试试:
if (passwordEncoder.matches(oldPassword,currentUser.getPassword())) {
String encodedNewPassword = passwordEncoder.encode(newPassword);
// Store encoded new password..
}
另见BCryptPasswordEncoder.matches(java.lang.CharSequence rawPassword,java.lang.String encodedPassword)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。