java - 对密码编码器的服务层进行封装

标签 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);
        /*....*/
}

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

最佳答案

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

但是,如果您确实希望将服务层与第三方库隔离,您可以创建一个用于对密码进行编码的接口(interface),然后使用您自己的包装 BCryptPasswordEncoder 的类来实现它,并注入(inject)该接口(interface)实现到您的服务对象中,服务对象仅查看和导入接口(interface)。

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

关于java - 对密码编码器的服务层进行封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685372/

相关文章:

java - 为 OPTIONS Http 方法禁用 Spring Security

spring-mvc - Spring Boot 为私有(private)页面启用 SSL

model-view-controller - 数据模型中的Spring Formatters,这是否违反了MVC?有更好的选择吗?

java - 使用 JUnit 运行 Spring 时出现问题

javascript - 何时使用 Marionette 与纯 Backbone

java - 无法将 JSON 数组发布到我的其余 Controller

java - 以良好的格式打印元素

java - 如何在Java中创建动态组合框,单击按钮时添加和删除?

java - 将正则表达式的 for 循环更改为 while 循环

java - HttpServletResponse 无法设置字符集