【问题标题】:spring boot using BcryptPasswordEncoder , the passwords are not matchingspring boot 使用 BcryptPasswordEncoder ,密码不匹配
【发布时间】:2021-07-06 20:51:14
【问题描述】:

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

【问题讨论】:

标签: java spring spring-boot thymeleaf bcrypt


【解决方案1】:

您无法将新密码与再次编码的旧密码匹配。 您可以将参数中的旧密码与当前密码匹配。

你可以这样试试:

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)

【讨论】:

  • 那么我如何检查提供的密码是否与数据库中的旧密码相同
  • oldPassword之后将用户的当前密码发送到matches方法。示例:passwordEncoder.matches(oldPassword, currentUser.getPassword())
猜你喜欢
  • 2022-10-14
  • 2018-10-09
  • 2021-03-13
  • 1970-01-01
  • 2021-08-29
  • 2019-12-19
  • 1970-01-01
  • 2021-12-12
  • 2020-01-07
相关资源
最近更新 更多