spring security登錄成功后通過Principal獲取名返回空問題
spring security登錄成功通過Principal獲取名返回空
如上圖:
前端登錄后獲取用戶信息,principal 返回空值,經(jīng)歷種種排查發(fā)現(xiàn),前端請求后端,請求頭沒有加 bearer
按上圖配置問題解決
spring security principal credentials authorities details authenticated
spring security在進行認證時,會將用戶名和密碼封裝成一個Authentication對象,在進行認證后,會將Authentication的權(quán)限等信息填充完全返回。
Authentication會被存在SecurityContext中,供應(yīng)用之后的授權(quán)等操作使用。
此處介紹下Authentication,Authentication存儲的就是訪問應(yīng)用的用戶的一些信息。
下面是Authentication源碼
public interface Authentication extends Principal, Serializable { //用戶的權(quán)限集合 Collection<? extends GrantedAuthority> getAuthorities(); //用戶登錄的憑證,一般指的就是密碼 Object getCredentials(); //用戶的一些額外的詳細信息,一般不用 Object getDetails(); //這里認為Principal就為登錄的用戶 Object getPrincipal(); //是否已經(jīng)被認證了 boolean isAuthenticated(); //設(shè)置認證的狀態(tài) void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException; }
講解了Authentication后,我們回過頭來再看attemptAuthentication方法,該方法會調(diào)用AuthenticationManager的authenticate方法進行認證并返回一個填充完整的Authentication對象。
在這里我們又要講解一下認證的幾個核心的類,很重要!
- a). AuthenticationManager
- b).ProviderManager
- c).AuthenticationProvider
- d).UserDetailsService
- e).UserDetails
來說一下這幾個類的作用以及關(guān)聯(lián)關(guān)系
- a). AuthenticationManager是一個接口,提供了authenticate方法用于認證。
- b). AuthenticationManager有一個默認的實現(xiàn)ProviderManager,其實現(xiàn)了authenticate方法。
- c). ProviderManager內(nèi)部維護了一個存有AuthenticationProvider的集合,ProviderManager實現(xiàn)的authenticate方法再調(diào)用這些AuthenticationProvider的authenticate方法去認證,表單提交默認用的AuthenticationProvider實現(xiàn)是DaoAuthenticationProvider。
- d). AuthenticationProvider中維護了UserDetailsService,我們使用內(nèi)存中的用戶,默認的實現(xiàn)是InMemoryUserDetailsManager。UserDetailsService用來查詢用戶的詳細信息,該詳細信息就是UserDetails。UserDetails的默認實現(xiàn)是User。查詢出來UserDetails后再對用戶輸入的密碼進行校驗。校驗成功則將UserDetails中的信息填充進Authentication中返回。校驗失敗則提醒用戶密碼錯誤。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用SpringEvent解決WebUploader大文件上傳解耦問題
Spring Event是Spring框架內(nèi)建的一種發(fā)布/訂閱模式的實現(xiàn),它允許應(yīng)用內(nèi)部不同組件之間通過事件進行通信,本文以WebUploader大文件上傳組件為例,在大文件處理的場景中使用SpringEvent的事件發(fā)布機制,靈活的擴展對文件的處理需求,需要的朋友可以參考下2024-07-07SpringBoot中@RequestBody不能和Multipart同時傳遞的問題解決
本文主要介紹了SpringBoot中@RequestBody不能和Multipart同時傳遞的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04java web監(jiān)聽器統(tǒng)計在線用戶及人數(shù)
本文主要介紹了java web監(jiān)聽器統(tǒng)計在線用戶及人數(shù)的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04在Java生產(chǎn)環(huán)境下進行性能監(jiān)控與調(diào)優(yōu)的詳細過程
在Java生產(chǎn)環(huán)境下進行性能監(jiān)控與調(diào)優(yōu)是一個復(fù)雜但重要的過程,它涉及到多個方面,包括代碼分析、JVM監(jiān)控、線程管理、垃圾收集優(yōu)化、內(nèi)存管理、數(shù)據(jù)庫交互等,下面我將提供一個詳細的概述和示例代碼,需要的朋友可以參考下2025-02-02關(guān)于eclipse中運行tomcat提示端口被占用的4種解決
這篇文章主要介紹了關(guān)于eclipse中運行tomcat提示端口被占用的4種解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01