[エラーログ] SecurityのBCryptPasswordEncoderで暗号化した後、パスワードを変更するロジックに問題があります

このエラーは、著作権管理プロジェクトで作業していたときに発生しました

エラーコード

	 @Override
    public Results<Void> changePassword(String username, String oldPassword, String newPassword) {
    
    
        // 根据用户名查询
        SysUser user = sysUserMapper.selcetUserByUsername(username);
        // 判断用户是否为空
        if (user == null) {
    
    
            return Results.failure(1, "用户不存在");
        }

        // 校验之前的密码是否正确, 这里就是错误所在
        if (!(new BCryptPasswordEncoder().encode(user.getPassword()).equals(oldPassword))) {
    
    
            return Results.failure(1, "旧密码错误");
        }
        // 修改数据库中的密码
        sysUserMapper.update(user.getId(), new BCryptPasswordEncoder().encode(newPassword));
        return Results.success();
    }


文字列がBCryptPasswordEncoderによって暗号化された後は、生成される暗号文が異なるため、この比較はここでは実行できず、BCryptPasswordEncoderの一致メソッドが必要になるため


    @Override
    public Results<Void> changePassword(String username, String oldPassword, String newPassword) {
    
    
        // 根据用户名查询
        SysUser user = sysUserMapper.selcetUserByUsername(username);
        // 判断用户是否为空
        if (user == null) {
    
    
            return Results.failure(1, "用户不存在");
        }

        // 校验之前的密码是否正确
        if (!new BCryptPasswordEncoder().matches(oldPassword, user.getPassword())) {
    
    
            return Results.failure(1, "旧密码错误");
        }
        // 修改数据库中的密码
        sysUserMapper.update(user.getId(), new BCryptPasswordEncoder().encode(newPassword));
        return Results.success();
    }


おすすめ

転載: blog.csdn.net/qq_42380734/article/details/107091291