从密码编码器封装服务层

时间:2016-07-31 15:12:58

标签: java spring-mvc model-view-controller service-layer

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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