【已解決】請教大神關(guān)于Spirng-Security的問題

原因是因?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;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容