从密码编码器封装服务层

Encapsulating of service layer from Password Encoder

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

@Override
public void updateUserEmail(String email, String newEmail, String password) throws InvalidPasswordException, DuplicateEmailException {

    Client client = getSpecializedUserByEmail(email);
        /*....*/
}

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

我不确定您为什么认为在服务中使用 BCryptPasswordEncoder 会破坏封装。

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

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