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