【错误日志】使用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