背景:用Spring Security进行校验时,我们自己写了一个类,用它实现UserDetailsService接口,来做校验。
总结在前边:
在做到密码加密这一块时,使用BCryptPasswordEncoder来做,它的加密是带salt的加密,所以说我们用它就可以方便很多,而且经过踩坑发现,它的salt也是嵌在加密后的密文中的,所以我们也不用保存salt,业务逻辑就是,用户注册时我们用它进行encode,然后校验时用它的matches方法就行了。
那我要记录的坑是什么呢?(坑就是我手残导致的,如果你想学怎么用,参照上一段,如果想看加密的逻辑,那么请继续)
我的MyUserDetailsService中的loadUserByUsername方法是这样的:
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.info("登录用户名:"+username);
String password = passwordEncoder.encode("123465");
logger.info("数据库密码是:" + password);
logger.info("decode:" + passwordEncoder.matches("123456", password));
User user = new User(username,password, true, true, true, true, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
logger.info("user pas:" + user.getPassword());
return user;
}
PasswordeEncoder已经注册为Bean:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();//passwordEncoder的实现类
}
没连数据库,我想做的逻辑是使用”123456“作为我的密码