在我的服务层,我有更新电子邮件的方法:
@Override
public void updateUserEmail(String email, String newEmail, String password) throws InvalidPasswordException, DuplicateEmailException {
Client client = getSpecializedUserByEmail(email);
/*....*/
}
密码 - 由用户输入,但是为了检查它是否与real匹配,我必须在我的服务层中使用 BCryptPasswordEncoder - 但这违反了服务的封装层。 我可以在控制器中使用密码检查 - 但这是不好的做法。 求助,我将非常感激)
答案 0 :(得分:1)
我不确定为什么你认为在服务中使用BCryptPasswordEncoder会破坏封装。
但是,如果你的意思是你真的想要将服务层与第三方库隔离,你可以创建一个用于编码密码的接口,然后使用你自己的包装BCryptPasswordEncoder的类来实现它,并注入实现到服务对象中,服务对象只能查看和导入接口。
这样,您的服务对象与编码器的耦合非常松散,编码器的内部实现可以在不影响服务对象的情况下进行更改。