由于 Spring Security 3.1 提供了一个新的方便的 PasswordEncoder 和一个实现 StardardPasswordEncoder,我尝试将它们实现到当前项目中。但是,在保存/验证用户密码时 PasswordEncoder 应该如何工作存在疑问。这是新 PasswordEncoder 的代码:
private static final String SALT_AS_TOP_SECRET = "mysalt";
private static final PasswordEncoder encoder = new StandardPasswordEncoder(
SALT_AS_TOP_SECRET);
public static String encrypt(String rawPassword) {
return encoder.encode(rawPassword);
}
public static boolean match(String rawPassword, String password) {
return encoder.matches(rawPassword, password);
}
我的应用程序是带有 JPA 的 Spring,因此有一个 User 实体使用基本的 getter/setter 实现 UserDetails 作为密码,还有一个服务类在服务层实现 UserDetailService。
我对 UserDetailService 只需要一个loadUserByUsername
不检查密码的方法感到困惑。所以这里有其他问题:
- 我应该将
match
PasswordEncoder 中的方法放在哪里? - 我应该为服务类实现另一个接口吗?
- 设置密码时,我应该在用户实体中给出任何逻辑吗?
- 由于新的 PasswordEncoder 接口独立于其他安全包,我敢打赌不需要从 xml 启动/注入 bean?我尝试将盐放入课堂而不是外部存储。
请给个提示,提前谢谢。