Spring 安全 BCrypt 总是寻找“$2a”正则表达式

Spring Security BCrypt always look for “$2a” regex

我正在通过 spring 引导实现 spring 安全性。我已经使用 BCrypt 生成器在线生成了密码。但是当我尝试登录时,我收到了错误消息:

2019-10-18 11:10:56.983 WARN 53908 --- [io-9090-exec-10] o.s.s.c.bcrypt.BCryptPasswordEncoder : Encoded password does not look like BCrypt.

经过一些研究,我发现 Spring Security BCrypt 中存在一个错误,它只查找“$2a”正则表达式。任何人都可以向我解释如何解决这些问题吗?

默认 spring 启动 2.1.x 支持 spring-security-core-5.1.x一般生成$2a版本的bcrypt

此版本不支持不同版本的BCryptPasswordEncoder。

如果要使用其他版本,需要升级spring-security-core版本

在你的下面添加 pom.xml

 <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.2.0.RELEASE</version>
 </dependency>

然后如下创建 BCryptPasswordEncoder bean

@Bean(name = "passwordEncoder")
    public BCryptPasswordEncoder getPasswordEncoder() {

        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(BCryptVersion.B);
        return bCryptPasswordEncoder;

    }

您可以在 BCryptPasswordEncoder 的构造函数中传递您想要的版本。

可能的值为

  • BCryptVersion.A
  • BCryptVersion.Y
  • BCryptVersion.B