SpringSecurity中的UserDetailsService深度解析
關(guān)于security的權(quán)限認證可以看一下這個專欄的上一篇文章。 基礎概念和入門的demo就不再這里面進行贅述了,今天學習一個這個UserDetailsService,
1、UserDetailsService詳解
當什么也沒有配置的時候,賬號和密碼是由 Spring Security 定義生成的。而在實際項目中賬號和密碼都是從數(shù)據(jù) 庫中查詢出來的。所以我們要通過自定義邏輯控制認證邏輯。如果需要自定義邏輯時,只需要實現(xiàn) UserDetailsService 接口即可。接口定義如下:

2、返回值
直接看源碼

要想返回 UserDetails 的實例就只能返回接口的實現(xiàn)類。SpringSecurity 中提供了如下的實例。對于我們只需要使 用里面的 User 類即可。注意 User 的全限定路徑是:
org.springframework.security.core.userdetails.User
此處經(jīng)常和系統(tǒng)中自己開發(fā)的 User 類弄混。
在User中也提供了很多的方法和屬性

?。?!雖然方法屬性很多,但是我們要看經(jīng)常使用的。
其中構(gòu)造方法有兩個,調(diào)用其中任何一個都可以實例化UserDetails 實現(xiàn)類 User 類的實例。而三個參數(shù)的構(gòu)造方法實際上也是調(diào)用 7 個參數(shù)的構(gòu)造方法。
- username:用戶名
- password:密碼
- authorities:用戶具有的權(quán)限。此處不允許為null。

注意看一下:
此處的用戶名應該是客戶端傳遞過來的用戶名。而密碼應該是從數(shù)據(jù)庫中查詢出來的密碼。Spring Security 會根據(jù)User中的password
和客戶端傳遞過來的password
進行比較。如果相同則表示認證通過,如果不相同表示認證
據(jù) User 中的 失敗。
authorities 里面的權(quán)限對于后面學習授權(quán)是很有必要的,包含的所有內(nèi)容為此用戶具有的權(quán)限,如有里面沒有 包含某個權(quán)限,而在做某個事情時必須包含某個權(quán)限則會出現(xiàn) 403。通常都是通過AuthorityUtils.commaSeparatedStringToAuthorityList(“”) 來創(chuàng)建 authorities 集合對象的。參數(shù)是一個 字符串,多個權(quán)限使用逗號分隔。
3、方法參數(shù)
方法參數(shù)表示用戶名。此值是客戶端表單傳遞過來的數(shù)據(jù)。默認情況下必須叫username,否則無法接收。
4、異常
UsernameNotFoundException 用戶名沒有發(fā)現(xiàn)異常。在 loadUserByUsername 中是需要通過自己的邏輯從數(shù)據(jù) 庫中取值的。如果通過用戶名沒有查詢到對應的數(shù)據(jù),應該拋出 UsernameNotFoundException ,系統(tǒng)就知道用戶名 沒有查詢到。
到此這篇關(guān)于SpringSecurity之UserDetailsService詳解的文章就介紹到這了,更多相關(guān)SpringSecurity UserDetailsService內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用BufferedReader讀取TXT文件中數(shù)值,并輸出最大值
這篇文章主要介紹了使用BufferedReader讀取TXT文件中數(shù)值,并輸出最大值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Springboot通用mapper和mybatis-generator代碼示例
這篇文章主要介紹了Springboot通用mapper和mybatis-generator代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12
Java 在PPT中創(chuàng)建散點圖的實現(xiàn)示例
本文將以Java代碼示例展示如何在PPT幻燈片中創(chuàng)建散點圖表。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置
這篇文章主要介紹了SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
Mybatis自動創(chuàng)建表和更新表結(jié)構(gòu)
這篇文章主要介紹了Mybatis自動創(chuàng)建表和更新表結(jié)構(gòu)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06
Android中PreferenceFragment的使用詳解
本文主要介紹了Android中PreferenceFragment的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

