用户密码加密存储
大约 1 分钟Spring全家桶SpringSecurity认证授权

SpringSecurity配置类配置PasswordEncoder
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
测试PasswordEncoder
@Autowired
private PasswordEncoder passwordEncoder;
@Test
void test1() {
// 加密
String encode = passwordEncoder.encode("123456789");
String encode2 = passwordEncoder.encode("123456789");
System.out.println(encode);
System.out.println(encode2);
// 密码校验
boolean matches = passwordEncoder.matches("123456789", "$2a$10$YzMd4CELnRUDNOs9HQJdR.KA2X5YnC5aOHQ4zCzjRVvGv5oOppEJW");
boolean matches1 = passwordEncoder.matches("123456789", "123456789");
System.out.println(matches);
System.out.println(matches1);
}
结果:
$2a$10$xEnP5Omtl9JEk8xUm4Qp7ONjKxcmwMjcgp/FAdo/KYj5IbZmF6agm
$2a$10$rr62fnSnQEURKuCVIO9KbuV8g3fQnbIQ6CJMwNxFLIQ2emec8slV2
2022-03-27 17:46:05.856 WARN 4316 --- [ main] o.s.s.c.bcrypt.BCryptPasswordEncoder : Encoded password does not look like BCrypt
true
false
再次测试登录

此时报错信息是用户名或者密码错误
。我们自己也在UserDetailsServiceImpl
抛出了一个异常用户名或者密码错误
,这里是用户查询不到的时候抛出的。但是输入的用户名admin
在数据库中是存在的,所以这个异常是SpringSecurity内部自己的异常(可以把异常信息改之后再测试,发现的确是这样),是PasswordEncoder
比对密码的时候跑出的。
此时我们已经配置了
PasswordEncoder
,但是数据库中还是存储之前的明文密码。PasswordEncoder
在调用matches方法
进行校验的时候,密码对不上,所以报错。
修改数据库中的密码为加密之后的:

再次访问登录页面,登录成功。