在我的服务层中,我有更新电子邮件的方法:
@Override
public void updateUserEmail(String email, String newEmail, String password) throws InvalidPasswordException, DuplicateEmailException {
Client client = getSpecializedUserByEmail(email);
/*....*/
}
密码 - 由用户输入,但为了检查它是否与真实匹配,我必须在我的服务层中使用 BCryptPasswordEncoder - 但这违反了服务封装层。 我可以在 Controller 中使用密码检查 - 但这是不好的做法。 请帮忙,我将非常感激)
最佳答案
我不确定您为什么认为在服务中使用 BCryptPasswordEncoder 会破坏封装。
但是,如果您确实希望将服务层与第三方库隔离,您可以创建一个用于对密码进行编码的接口(interface),然后使用您自己的包装 BCryptPasswordEncoder 的类来实现它,并注入(inject)该接口(interface)实现到您的服务对象中,服务对象仅查看和导入接口(interface)。
这样,您的服务对象与编码器的耦合非常松散,并且可以更改编码器的内部实现,而不会影响服务对象。
关于java - 对密码编码器的服务层进行封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685372/