2

由于 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不检查密码的方法感到困惑。所以这里有其他问题:

  1. 我应该将matchPasswordEncoder 中的方法放在哪里?
  2. 我应该为服务类实现另一个接口吗?
  3. 设置密码时,我应该在用户实体中给出任何逻辑吗?
  4. 由于新的 PasswordEncoder 接口独立于其他安全包,我敢打赌不需要从 xml 启动/注入 bean?我尝试将盐放入课堂而不是外部存储。

请给个提示,提前谢谢。

4

0 回答 0