原因是因为存储在数据库中的密码并未经过加密处理,如果经过加密后的存入数据库,则直接使用userInfo.getPassword()即可直接使用
猜想:{noop}是使用明文保存的密码,但是验证权限时会出错(因为在Spring-Security中开启了密码加密导致的出错)
如果在password前添加"{noop}"便会报错
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserInfo userInfo=null;
try {
userInfo= userDao.findByUsername(username);
} catch (Exception e) {
e.printStackTrace();
}
//将自己的信息封装成UserDetails对象
User user = new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority());
return user;
}
报错如下(使用bcrypt加密):
BadCredentialsException: Bad credentials
如果在UserService中使用BCryptPasswordEncoder对密码进行封装就能顺利完成权限匹配进入系统:
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserInfo userInfo=null;
try {
userInfo= userDao.findByUsername(username);
} catch (Exception e) {
e.printStackTrace();
}
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String password = bCryptPasswordEncoder.encode(userInfo.getPassword());
//将自己的信息封装成UserDetails对象
User user = new User(userInfo.getUsername(),password,getAuthority());
return user;
}