我将项目从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()
。您能帮我解决这个问题吗?
答案 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;
}