spring-boot - 在 1 或 2 位置检测到非十六进制字符
问题描述
我正在使用 spring boot 2.0.5 并使用以下代码进行密码编码。
@Bean
public PasswordEncoder delegatingPasswordEncoder() {
PasswordEncoder defaultEncoder = new StandardPasswordEncoder();
Map<String, PasswordEncoder> encoders = new HashMap<>();
encoders.put("bcrypt", new BCryptPasswordEncoder());
encoders.put("scrypt", new SCryptPasswordEncoder());
DelegatingPasswordEncoder passworEncoder = new DelegatingPasswordEncoder(
"bcrypt", encoders);
passworEncoder.setDefaultPasswordEncoderForMatches(defaultEncoder);
return passworEncoder;
}
顺便说一句,我使用来自另一个项目的上述代码生成了编码密码。因为在我当前的项目中,我没有生成编码密码,我只是在我当前的项目数据库中复制了该编码密码。编码密码如下所示。
{bcrypt}$2a$10$DPOPug/9As2jwQzW3Ezr1u3LE31kFaMR/z/8bMpQYHQUJ0b6NyZri
问题是当我使用密码从生成编码字符串的项目登录时,它运行良好。但是当我使用相同的密码从我当前的项目登录时,它不起作用。请告诉我原因。
解决方案
用以下方法替换您的方法。
@Bean
public PasswordEncoder delegatingPasswordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}