在1或2位置检测到非十六进制字符

时间:2018-10-12 07:56:09

标签: spring-boot

  

我正在使用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
  

问题是,当我使用密码从生成编码字符串的项目中登录时,它运行良好。但是,当我使用相同的密码从当前项目登录时,它将无法正常工作。请告诉我原因。

1 个答案:

答案 0 :(得分:0)

用以下方法替换您的方法。

@Bean
public PasswordEncoder delegatingPasswordEncoder() {

    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

参考:https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#constructing-delegatingpasswordencoder