在Spring Boot 2.1.9版本中寻找匹配的密码编码器

时间:2019-10-09 12:00:13

标签: spring-boot spring-security

我将项目从spring-boot 1.5.12.release升级到2.1.9.release。我找不到最新版本的org.springframework.security.authentication.encoding.ShaPasswordEncoder的匹配编码器。以下是我在代码中包含的代码段。

@Autowired
private ShaPasswordEncoder encoder;

[...]

    String passwordHash = encoder.encode((String)auth.getCredentials());

    if (cachedAuth!=null && encoder.isPasswordValid((String) cachedAuth.getCredentials(), password, salt)){ 
        return cachedAuth;
    }

我在Spring Boot 2.1.9发行版中发现了此类org.springframework.security.crypto.password.PasswordEncoder,但是这里没有这种方法isPasswordValid()。您能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

Spring Security 4.2.12中已不推荐使用SHA密码编码器,请参见ShaPasswordEncoder

  

已弃用。

     

已弃用并标记为删除。用算法“ SHA- $ strength”(即“ SHA-1”或“ SHA-256”)替换为MessageDigestPasswordEncoder的实现。

它已在Spring Security 5中删除,但您仍然可以使用MessageDigestPasswordEncoder

答案 1 :(得分:0)

 @Bean
 @SuppressWarnings("deprecation")
public PasswordEncoder delegatingPasswordEncoder() {
    PasswordEncoder defaultEncoder = new StandardPasswordEncoder();
    Map<String, PasswordEncoder> encoders = new HashMap<>();
     encoders.put("SHA-256", new 
  org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));
    DelegatingPasswordEncoder passworEncoder = new DelegatingPasswordEncoder(
      "bcrypt", encoders);
    passworEncoder.setDefaultPasswordEncoderForMatches(defaultEncoder); 
    return passworEncoder;
}