【发布时间】:2018-01-07 05:46:53
【问题描述】:
我正在开发一个使用 Spring Security 对用户进行身份验证的项目。另一方面,我想使用 BCryptPasswordEncoder 来检查用户是否存储。我正在使用下面的代码通过 BCryptPasswordEncoder 从 TEST1234 生成哈希。在每个 for 循环中,BCryptPasswordEncoder 生成不同的哈希。假设我正在获取它们的第一个哈希值并存储在数据库中。
public static void main(String[] args) {
int i = 0;
while (i < 10) {
String password = "TEST1234";
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);
System.out.println(hashedPassword);
i++;
}
}
在此之后,我正在运行项目,调用安全页面,输入用户名和密码并访问安全页面。
现在,我将停止该项目并从上面的 for 循环中获取第二个哈希。我正在运行项目,调用安全页面,输入用户名和密码,然后可以“再次”访问安全页面。
我不明白它是如何工作的。
当服务器运行时,为什么如果我更改数据库登录中的哈希值不起作用并且当服务器停止并且数据库中的哈希值更改并且服务器启动时,为什么登录使用真实的用户名和密码?
我的 Spring Security 验证器代码是这样的:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select memberUserName,password,enabled from Member where memberUserName=?")
.authoritiesByUsernameQuery("select memberUserName,role from userroles where memberUserName=?")
.passwordEncoder(new BCryptPasswordEncoder());
}
【问题讨论】:
标签: java spring spring-security