Spring security 3.1:在何处使用PasswordEncoder检查用户密码

Spring security 3.1:在何处使用PasswordEncoder检查用户密码,spring,authentication,spring-security,Spring,Authentication,Spring Security,由于SpringSecurity3.1提供了一个新的方便的PasswordEncoder和一个实现StardPasswordEncoder,我尝试将它们实现到当前项目中。但是,在保存/验证用户密码时,密码编码器应该如何工作存在问题。以下是新密码编码器的代码: private static final String SALT_AS_TOP_SECRET = "mysalt"; private static final PasswordEncoder encoder = new S

由于SpringSecurity3.1提供了一个新的方便的PasswordEncoder和一个实现StardPasswordEncoder,我尝试将它们实现到当前项目中。但是,在保存/验证用户密码时,密码编码器应该如何工作存在问题。以下是新密码编码器的代码:

    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,因此有一个用户实体使用基本getter/setter实现UserDetails作为密码,还有一个服务类在服务层实现UserDetailService

我对UserDetailService只需要一个不检查密码的
loadUserByUsername
方法感到困惑。还有其他问题:

  • 我应该将PasswordEncoder中的
    匹配方法放置在哪里
    
  • 我应该为服务类实现另一个接口吗
  • 设置密码时,我是否应给出用户实体内的任何逻辑
  • 由于新的PasswordEncoder接口独立于其他安全包,我打赌不需要从xml启动/注入bean?我试着把盐放在教室里,而不是放在外面

  • 请给出提示,提前感谢。

    密码编码器应插入负责验证用户身份的
    AuthenticationProvider
    。请看一个例子。@Luke Taylor。非常感谢。在本例中,密码在JDBC中编码为POJO。但是如何在JPA实体类上使用PasswordEncoder加密密码呢?这里有一个更好的设计问题,因为我们想要加密salt,所以我们似乎必须将salt放入外部源,否则需要将salt放在application security.xml(身份验证)和POJO(加密密码)中,所以有更好的解决方案使salt成为内部的(在POJO中硬编码)?谢谢。如回答中所述,使用BCrypt会更好。要对密码进行编码,只需调用
    passwordEncoder.encode(密码)
    。你在哪里做取决于你自己。我不能说,因为我真的不知道您的应用程序是如何实现的。假设您可以在创建新的JPA实体时这样做?