【问题标题】:Problem with Update in CRUD during unit tests because of Bcrypt encryption由于 Bcrypt 加密,在单元测试期间更新 CRUD 出现问题
【发布时间】:2021-05-31 11:30:11
【问题描述】:

我在将实体保存到数据库时对我的用户密码进行哈希处理。 这样做时,我无法更新用户名,而无需再次对密码进行哈希处理。

我为它写了测试,但失败了。

@Test
@DisplayName("Update")
public void testForUpdate() {
    final User user = new User("UserForUpdate", "UpdatedUser123");
    this.userService.save(user);
    User found = this.userService.findOneByUsernameAndPassword(user.getUsername(), user.getPassword());
    assertTrue(found.getId() != null, "Found real user");
    this.userService.save(found);
    final User asserted = this.userService.findOneByUsernameAndPassword(found.getUsername(), user.getPassword());
    assertTrue(asserted != null, "Updated user found");
    assertTrue(user.getId() == asserted.getId(), "User ID is persisted");
}

UserService 的保存方法如下所示:

@Override
public User save(User newUser) {
    newUser.setPassword(passwordEncoder.encode(newUser.getPassword()));
    return repository.save(newUser);
}

这样保存是不是我做错了什么?

我应该如何进行才能正确实施 CRUD 更新?

感谢大家的指点

【问题讨论】:

    标签: junit spring-security spring-data-jpa


    【解决方案1】:

    存储用户时不要修改密码。而是在修改密码时对密码进行编码。

    public class UserSevice {
    
        ...
    
        public changePassword(User user, String plainPassword) {
           user.setPassword(passwordEncoder.encode(plainPassword));
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 1970-01-01
      • 2020-08-05
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      相关资源
      最近更新 更多