我正在广泛阅读文档Spring 3.1 安全文档,但我找不到所有问题的答案。
在 Spring Web 应用程序中,基于表单登录(用户 + pwd),我想使用 SHA-256 对用户密码进行加盐,为每个用户使用随机加盐。这意味着我必须在我的数据库中为每个用户保存盐和散列密码。到目前为止没有问题。
很明显,我必须自己实现
UserDetailsService
以从我的数据库中获取我的用户信息并在我的spring-security.xml
.似乎我必须
getSalt()
在我的实现之上添加一个额外的方法,UserDetails
以便在检查用户提供的登录名与存储的散列密码时可用。
然后情况变得不明朗。我应该拦截登录请求。从第 6.4.3 节开始,似乎 Spring 会将用户提交的凭据映射到一个Authentication
对象并将其提交给AuthenticationManager
.
我的问题是:
Authentication
i) Spring 将提交什么实现AuthenticationManager
?如何找回用户名和密码?
ii) 看来我必须实现自己的AuthenticationManager
. 在每次调用时,我都会从数据库中authenticate(...)
获取登录名和密码。UserDetails
然后,用相应的盐对提供的密码进行哈希处理,并与数据库哈希项进行比较。正确的?
iii) AuthenticationManager
API 也有一个supports(...)
方法。应该如何实施?
iv) 应该如何Authentication
配置AuthenticationManager
?