日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

若依管理系统——前后端分离版(二)登陆接口分析及SpringSecurity的登陆认证流程

發布時間:2025/3/21 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 若依管理系统——前后端分离版(二)登陆接口分析及SpringSecurity的登陆认证流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、登陸流程分析
0. 流程整理
1. 圖片驗證碼接口/captchaImage
2.登陸驗證接口/login
2.1 校驗圖片驗證碼
2.1 查詢用戶信息
2.3查詢用戶的權限信息
2.4 生成令牌token
3.登錄
二、SpringSecurity的登陸認證流程分析
1. AuthenticationManager 認證管理器
2. ProviderManager
3. AbstractUserDetailsAuthenticationProvider 查詢UserDetails信息
4. DaoAuthenticationProvider
5. UserDetailsService
6. AbstractUserDetailsAuthenticationProvider 進行認證
6.1 認證前校驗
6.2 附加校驗
6.3 認證后校驗
三、在請求頭中攜帶token信息請求后臺接口
1. 獲得請求頭
2.獲取請求頭中的認證信息
3.解析jwt令牌,獲取緩存中的用戶信息
一、登陸流程分析
0. 流程整理


1. 圖片驗證碼接口/captchaImage


在登陸之前會有一個請求圖片驗證碼的接口/captchaImage,頁面獲得圖片驗證碼,后臺接口生成一個圖片和UUID,并將驗證碼Code和UUID存入的到Redis緩存中。


2.登陸驗證接口/login


2.1 校驗圖片驗證碼
參數包括:登錄名、密碼、驗證碼、唯一標識,進行登錄驗證。


2.1 查詢用戶信息
如果驗證碼驗證成功,則開始檢驗用戶信息:會去調用 UserDetailsServiceImpl的loadUserByUsername方法。進行用戶認證流程,具體見下一節。


UserDetailsServiceImpl是我們實現了UserDetailsService接口:

返回一個UserDetails對象,包括用戶對象和用戶的權限信息。


LoginUser實現了UserDetails


2.3查詢用戶的權限信息

sys_menu是菜單權限表,關聯了角色-菜單關聯表、用戶-角色關聯表、角色表。
也就是根據用戶Id通過用戶表-角色關聯表 查詢 角色信息,在通過角色-菜單表 查詢菜單信息。


2.4 生成令牌token

先通過工具類生成一個UUID,作為令牌的唯一標識。

refreshToken()方法以生成的UUID加前綴作為Key,將用戶信息存到緩存中,并設置有效期。

使用createToken方法生成 JWT 令牌


流程總結:
查詢用戶信息,生成UUID,以UUID作為key,用戶信息為Value 存入緩存,在將UUID信息存放到到JWT令牌中,將令牌返回給前端頁面。
用戶再次請求的時候將令牌放到請求頭中,后臺解析令牌,獲得UUID,去緩存中回去用戶信息。

3.登錄
登錄成功:


二、SpringSecurity的登陸認證流程分析


1. AuthenticationManager 認證管理器

根據用戶輸入的用戶名、密碼構建了 UsernamePasswordAuthenticationToken,并將其交給 AuthenticationManager 來進行認證處理。AuthenticationManager 本身不包含認證邏輯,其核心是用來管理所有的 AuthenticationProvider,通過交由合適的 AuthenticationProvider 來實現認證。

2. ProviderManager
下面跳轉到了 ProviderManager ,該類是 AuthenticationManager 的實現類。


3. AbstractUserDetailsAuthenticationProvider 查詢UserDetails信息
傳統表單登錄的 AuthenticationProvider 主要是由 AbstractUserDetailsAuthenticationProvider 來進行處理的,通過 retrieveUser() 方法讀取到數據庫中的用戶信息,具體實現在 DaoAuthenticationProvider 中

4. DaoAuthenticationProvider

5. UserDetailsService
這里調用了UserDetailsService的loadUserByUsername方法,而我們的UserDetailsServiceImpl實現了UserDetailsService接口,重寫了loadUserByUsername方法


6. AbstractUserDetailsAuthenticationProvider 進行認證
當我們成功的讀取 UserDetails 后,下面開始對其進行認證。

6.1 認證前校驗


6.2 附加校驗


6.3 認證后校驗


我們可以看到認證校驗分為 前校驗、附加校驗和后校驗,如果任何一個校驗出錯,就會拋出相應的異常。所有校驗都通過后,調用 createSuccessAuthentication() 返回認證信息。


在 createSuccessAuthentication 方法中,我們發現它重新 new 了一個 UsernamePasswordAuthenticationToken,因為到這里認證已經通過了,所以將 authorities 注入進去,并設置 authenticated 為 true。
到此就已經認證完成了。

SpringSecurity認證流程文章參考:https://jitwxs.blog.csdn.net/article/details/84703690

三、在請求頭中攜帶token信息請求后臺接口
比如 登錄后請求的/getInfo接口:

請求后臺接口時,獲取請求頭中的認證信息:

Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImE5ZWQ4MjYxLTRmOTgtNDY1Zi1iNTcwLTlkMmU2MGEyOWQzOCJ9.z0gvgUQPDQSiMAm5QfljsRSPGkJhuCvjlA--m_Jd7y87QICeb53Sj28yMLxNQwkoXqwsk3HKLnkX1OjA5goUdQ
1


1. 獲得請求頭
首先使用ServletUtils.getRequest()獲取request信息,這個方法有調用的是getRequestAttributes()方法,


2.獲取請求頭中的認證信息
獲得了request信息后,從請求頭中獲取token:


3.解析jwt令牌,獲取緩存中的用戶信息
解析token,獲取唯一標識,根據唯一標識獲得緩存中的用戶信息:


由此就獲得了用戶的信息,在根據用戶信息查詢對應的角色和權限。
?

總結

以上是生活随笔為你收集整理的若依管理系统——前后端分离版(二)登陆接口分析及SpringSecurity的登陆认证流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。