There is no PasswordEncoder mapped for id “null”
没有为id“null”映射PasswordEncoder,说白了就是没有添加加密方式,并且你的选择也没有使用加密方式。
1. 内存中存取密码的修改方式
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//inMemoryAuthentication 从内存中获取
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("user1").password(new BCryptPasswordEncoder().encode("123")).roles("USER");
}
inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())“,这相当于登陆时用BCrypt加密方式对用户密码进行处理.以前的”.password(“123”)" 变成了 “.password(new BCryptPasswordEncoder().encode(“123”))”,这相当于对内存中的密码进行Bcrypt编码加密.如果比对时一致,说明密码正确,才允许登陆.
2. 在数据库中存取密码的修改方式
如果你用的是在数据库中存储用户名和密码,那么一般是要在用户注册时就使用BCrypt编码将用户密码加密处理后存储在数据库中,并且修改configure()方法,加入".passwordEncoder(new BCryptPasswordEncoder())",保证用户登录时使用bcrypt对密码进行处理再与数据库中的密码比对.如下:
//注入userDetailsService的实现类
auth.userDetailsService(userService).passwordEncoder(new BCryptPasswordEncoder());
or
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
如有错误欢迎指正