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

2、返回值
直接看源碼

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

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

注意看一下:
此處的用戶名應(yīng)該是客戶端傳遞過來的用戶名。而密碼應(yīng)該是從數(shù)據(jù)庫(kù)中查詢出來的密碼。Spring Security 會(huì)根據(jù)User中的password
和客戶端傳遞過來的password
進(jìn)行比較。如果相同則表示認(rèn)證通過,如果不相同表示認(rèn)證
據(jù) User 中的 失敗。
authorities 里面的權(quán)限對(duì)于后面學(xué)習(xí)授權(quán)是很有必要的,包含的所有內(nèi)容為此用戶具有的權(quán)限,如有里面沒有 包含某個(gè)權(quán)限,而在做某個(gè)事情時(shí)必須包含某個(gè)權(quán)限則會(huì)出現(xiàn) 403。通常都是通過AuthorityUtils.commaSeparatedStringToAuthorityList(“”) 來創(chuàng)建 authorities 集合對(duì)象的。參數(shù)是一個(gè) 字符串,多個(gè)權(quán)限使用逗號(hào)分隔。
3、方法參數(shù)
方法參數(shù)表示用戶名。此值是客戶端表單傳遞過來的數(shù)據(jù)。默認(rèn)情況下必須叫username,否則無法接收。
4、異常
UsernameNotFoundException 用戶名沒有發(fā)現(xiàn)異常。在 loadUserByUsername 中是需要通過自己的邏輯從數(shù)據(jù) 庫(kù)中取值的。如果通過用戶名沒有查詢到對(duì)應(yīng)的數(shù)據(jù),應(yīng)該拋出 UsernameNotFoundException ,系統(tǒng)就知道用戶名 沒有查詢到。
到此這篇關(guān)于SpringSecurity之UserDetailsService詳解的文章就介紹到這了,更多相關(guān)SpringSecurity UserDetailsService內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于MyBatis的數(shù)據(jù)持久化框架的使用詳解
Mybatis是一個(gè)優(yōu)秀的開源、輕量級(jí)持久層框架,它對(duì)JDBC操作數(shù)據(jù)庫(kù)的過程進(jìn)行封裝。本文將為大家講解一下基于MyBatis的數(shù)據(jù)持久化框架的使用,感興趣的可以了解一下2022-08-08
Java深入講解AWT實(shí)現(xiàn)事件處理流程
AWT的事件處理是一種委派式事件處理方式:普通組件(事件源)將整個(gè)事件處理委托給特定的對(duì)象(事件監(jiān)聽器);當(dāng)該事件源發(fā)生指定的事件時(shí),就通知所委托的事件監(jiān)聽器,由事件監(jiān)聽器來處理這個(gè)事件2022-04-04
SpringCloud Gateway的熔斷限流配置實(shí)現(xiàn)方法
Spring Cloud Gateway支持通過配置熔斷和限流機(jī)制來保證服務(wù)的穩(wěn)定性和可用性,可通過Hystrix和Resilience4j兩種方式實(shí)現(xiàn)。Hystrix通過注解和配置文件實(shí)現(xiàn)熔斷限流,Resilience4j通過編程式配置實(shí)現(xiàn)2023-04-04
Java MQTT實(shí)戰(zhàn)應(yīng)用
本文詳解MQTT協(xié)議,涵蓋其發(fā)布/訂閱機(jī)制、低功耗高效特性、三種服務(wù)質(zhì)量等級(jí)(QoS0/1/2),以及客戶端、代理、主題的核心概念,最后提供Linux部署教程、SpringBoot整合方法與MQTTX工具下載鏈接,對(duì)java mqtt相關(guān)知識(shí)感興趣的朋友一起看看吧2025-06-06
解決java文件流處理異常 mark/reset not supported問題
這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10

