spring使用bcryptpasswordencoder引导,密码不匹配

i7uq4tfw  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(883)

spring启动应用程序,用户登录后想更改密码,但我的功能是不更改密码。

@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”登录,这意味着密码是好的

ttp71kqs

ttp71kqs1#

您不能将新密码与重新编码的旧密码匹配。可以将参数中的旧密码与当前密码匹配。
您可以这样尝试:

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)

相关问题