由于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);
    }

我的应用程序是Spring with JPA,因此有一个User实体使用基本的getter / setter为密码实现UserDetails,还有一个服务类在服务层实现UserDetailService .

我很困惑UserDetailService只需要一个不检查密码的 loadUserByUsername 方法 . 所以这里有其他问题:

  • 我应该从PasswordEncoder放置 match 方法?

  • 我要为服务类实现另一个接口吗?

  • 设置密码时,我应该在User实体中给出任何逻辑吗?

  • 由于新的PasswordEncoder接口独立于其他安全包,我打赌不需要从xml启动/注入bean?我尝试在课堂内使用盐而不是外部存储 .

请提前谢谢 .