我正在使用 Stripes 和 Spring 构建一个 Web 应用程序。它需要具有登录/身份验证功能。现在,我将用户信息与用户凭据分开存储在数据库中。我的用户模型不包含凭据,因为我不想传递有价值的密码。
Spring 管理着我所有的 DAO。
现在,我正在实施一个基于非容器的安全系统。我存储密码的 sha-2 哈希值,并将表单中提交的密码与数据库中存储的密码进行比较。这种比较已经过测试并且有效。我试图弄清楚如何将这个东西连接在一起。现在我有一个 LoginActionBean 来捕获登录请求并使用一个“PasswordService”单例,该单例在内部使用 UserDAO 来检索凭据并与提交的参数进行比较。我的春豆是:
<bean id="passwordSerivce" class="com.example.store.authentication.PasswordService" factory-method="getInstance">
<property name="userDAO" ref="userDAO"/>
</bean>
但是,PasswordService 单例需要一个:
public void setUserDAO(UserDAO userDAO) { ...}
在单例中没有真正意义的方法(UserDAO 是一个接口)。
我正在寻找合适的设计。我读过 ServiceLocators 是 Spring 被发明的原因。有什么想法吗?
我也想知道我还能如何设计这个。我有一个 ActionBean,当用户单击“登录”时会调用它,但我实际上如何进行身份验证。我是否将身份验证服务注入到 bean 中?我是否创建了一个任何人都可以调用的单例?我是否有一个 Spring 注入的 LoginAcionBean 使用的通用接口?如果我不使用 Spring,它将如何完成?