Spring安全-BcryptPasswordEncoder
我在我们的应用程序中使用Spring安全性,并希望使用存储在数据库中的更改密码选项的密码来验证用户输入。
密码如下存储在DB中。
user.setPassword(new BCryptPasswordEncoder().encode("<userPassword>"));
在此,用户输入的密码使用上述逻辑进行编码并存储在DB中。现在,我只是想从用户那里获取更改密码的密码。从用户那里获得密码后,我使用上述逻辑进行编码,然后尝试与数据库进行比较。即使我使用相同的逻辑进行编码,编码后的值似乎也有所不同。
我的配置来自WebSecurityConfig
:
@Autowiredpublic void configAuthentication(final AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
我不确定比较有什么问题。
回答:
即使我使用相同的逻辑进行编码,编码后的值似乎也有所不同。
Bcrypt算法使用的内置盐值每次都不同。因此,是的,即使对于相同的 Clear Text, 相同的编码过程也会生成不同的 Cipher Text
。
从用户那里获得密码后,我使用上述逻辑进行编码,然后尝试与数据库进行比较
不要编码 原始密码
。假设rawPassword
是客户端提供给您的密码,并且encodedPassword
是数据库中已编码的存储密码。然后,不要使用来编码rawPassword
和比较结果,而是String#equals
使用PasswordEncoder#matches
方法:
PasswordEncoder passwordEnocder = new BCryptPasswordEncoder();if (passwordEncoder.matches(rawPassword, encodedPassword)) {
System.out.println("Matched!");
}
以上是 Spring安全-BcryptPasswordEncoder 的全部内容, 来源链接: utcz.com/qa/404926.html