从密码编码器封装服务层



在我的服务层中,我有一个更新电子邮件的方法:

@Override
public void updateUserEmail(String email, String newEmail, String password) throws InvalidPasswordException, DuplicateEmailException {
    Client client = getSpecializedUserByEmail(email);
        /*....*/
}

密码-由用户输入,但为了检查它是否与真实密码匹配,我必须在服务层中使用BCryptPasswordEncoder,但这违反了服务层的封装。我可以在控制器中使用密码检查,但这是一种糟糕的做法。请帮忙,我将非常感激)

我不知道你为什么认为在服务中使用BCryptPasswordEncoder会破坏封装。

但是,如果您的意思是真正想将服务层与第三方库隔离开来,那么您可以创建一个用于编码密码的接口,然后用自己的封装BCryptPasswordEncoder的类来实现它,并将该实现注入到您的服务对象中,服务对象只能看到和导入接口。

这样,您的服务对象与编码器的耦合非常松散,并且编码器的内部实现可以在不影响服务对象的情况下进行更改。

最新更新