原因是因?yàn)榇鎯υ跀?shù)據(jù)庫中的密碼并未經(jīng)過加密處理,如果經(jīng)過加密后的存入數(shù)據(jù)庫,則直接使用userInfo.getPassword()即可直接使用
猜想:{noop}是使用明文保存的密碼,但是驗(yàn)證權(quán)限時(shí)會出錯(cuò)(因?yàn)樵赟pring-Security中開啟了密碼加密導(dǎo)致的出錯(cuò))
如果在password前添加"{noop}"便會報(bào)錯(cuò)
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;
}
報(bào)錯(cuò)如下(使用bcrypt加密):
BadCredentialsException: Bad credentials
如果在UserService中使用BCryptPasswordEncoder對密碼進(jìn)行封裝就能順利完成權(quán)限匹配進(jìn)入系統(tǒng):
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;
}