首页 > 解决方案 > 在 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

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

标签: spring-boot

解决方案


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

@Bean
public PasswordEncoder delegatingPasswordEncoder() {

    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

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


推荐阅读