SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案步驟詳解
在前后端分離架構(gòu)中,用戶登錄成功后,后端頒發(fā)JWT token至前端,該token被安全存儲于LocalStorage。隨后,每次請求均自動攜帶此token于請求頭中,以驗(yàn)證用戶身份。后端設(shè)有過濾器,攔截并校驗(yàn)token有效性,一旦發(fā)現(xiàn)過期則引導(dǎo)用戶重新登錄。
簡單的說明token實(shí)現(xiàn)身份認(rèn)證的步驟:
用戶登錄成功服務(wù)端返回token
之后每次用戶請求都攜帶token,在Authorization Header中。
后端服務(wù)取出token進(jìn)行decode,判斷有效期及失效策略。
返回對應(yīng)的成功失敗
鑒于JWT包含用戶信息且需保障安全,其過期時(shí)間通常設(shè)置較短。然而,這易導(dǎo)致用戶頻繁登錄,尤其是在處理復(fù)雜表單時(shí)(比如在線考試),因耗時(shí)過長而遇token過期,引發(fā)不必要的登錄中斷和數(shù)據(jù)丟失,嚴(yán)重影響用戶體驗(yàn)。如何在用戶無感知狀態(tài)下實(shí)現(xiàn)token自動續(xù)期的策略,減少頻繁登錄需求,確保表單數(shù)據(jù)不丟失?
解決token過期的續(xù)期問題可以有很多種不同的方案,這里舉一些比較有代表性的例子,一種是單token續(xù)期,一種是雙token續(xù)期。
1 單token續(xù)期

用戶認(rèn)證與Token生成:用戶成功登錄后,服務(wù)端生成一個(gè)包含必要信息的JWT(Json Web Token),并返回給客戶端。此Token作為后續(xù)請求的身份驗(yàn)證依據(jù)。
請求攜帶Token:在后續(xù)的每一次API請求中,客戶端都需在HTTP請求的Authorization頭部字段中攜帶此JWT,以便服務(wù)端驗(yàn)證用戶的身份和權(quán)限。
Token管理策略:服務(wù)端設(shè)定了Token的失效時(shí)間(或失效次數(shù))以及一個(gè)重新登錄的期限閾值。每當(dāng)用戶登錄時(shí),服務(wù)端會記錄當(dāng)前的登錄時(shí)間,以便后續(xù)驗(yàn)證使用。
Token驗(yàn)證與響應(yīng):
- 當(dāng)用戶攜帶Token發(fā)起請求時(shí),服務(wù)端首先根據(jù)Token的失效時(shí)間和重新登錄期限進(jìn)行驗(yàn)證。
- 若Token有效,則正常處理請求并返回所需資源。
- 若Token已失效但仍在重新登錄期限內(nèi),服務(wù)端返回特定的錯(cuò)誤代碼提示Token已過期,同時(shí)提示客戶端進(jìn)行Token刷新。
Token刷新機(jī)制:
- 客戶端接收到Token過期錯(cuò)誤代碼后,自動調(diào)用Refresh Token接口,向服務(wù)端請求刷新Token。
- 服務(wù)端驗(yàn)證請求的有效性(如檢查是否仍在重新登錄期限內(nèi)等),通過后生成新的有效Token并返回給客戶端。
使用刷新后的Token:客戶端在收到新的Token后,自動替換掉舊的Token,并在后續(xù)的請求中攜帶此新Token繼續(xù)訪問服務(wù)。
強(qiáng)制重新登錄:
- 若服務(wù)端判斷當(dāng)前Token的使用時(shí)長已超過了設(shè)定的重新登錄期限,則不再允許通過Refresh Token接口刷新Token。
- 此時(shí),服務(wù)端會返回強(qiáng)制重新登錄的錯(cuò)誤代碼給客戶端,客戶端接收到此代碼后,應(yīng)引導(dǎo)用戶跳轉(zhuǎn)至登錄頁面進(jìn)行重新登錄。
比如:
- 將 token 過期時(shí)間設(shè)置為15分鐘;
- 前端發(fā)起請求,后端驗(yàn)證 token 是否過期;如果過期,前端發(fā)起刷新token請求,后端為前端返回一個(gè)新的token;
- 前端用新的token發(fā)起請求,請求成功;
- 如果要實(shí)現(xiàn)每隔72小時(shí),必須重新登錄,后端需要記錄每次用戶的登錄時(shí)間;用戶每次請求時(shí),檢查用戶最后一次登錄日期,如超過72小時(shí),則拒絕刷新token的請求,請求失敗,跳轉(zhuǎn)到登錄頁面。
- 后端還可以記錄刷新token的次數(shù),比如最多刷新50次,如果達(dá)到50次,則不再允許刷新,需要用戶重新授權(quán)。
到此這篇關(guān)于SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案的文章就介紹到這了,更多相關(guān)SpringBoot JWT token授權(quán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue如何優(yōu)雅處理Token過期并自動續(xù)期
- SpringBoot基于Redis實(shí)現(xiàn)token的在線續(xù)期的實(shí)踐
- springboot+vue實(shí)現(xiàn)Token自動續(xù)期(雙Token方案)
- SpringBoot中Token登錄授權(quán)、續(xù)期和主動終止的方案流程分析
- SpringBoot實(shí)現(xiàn)JWT token自動續(xù)期的示例代碼
- Spring?Boot實(shí)現(xiàn)JWT?token自動續(xù)期的實(shí)現(xiàn)
- JAVA實(shí)現(xiàn)Token自動續(xù)期機(jī)制的示例代碼
相關(guān)文章
詳解Idea SpringBoot搭建SpringCloud的準(zhǔn)備工作(推薦)
這篇文章主要介紹了Idea SpringBoot搭建SpringCloud的準(zhǔn)備工作(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
springboot實(shí)現(xiàn)訪問多個(gè)redis庫
這篇文章主要介紹了springboot實(shí)現(xiàn)訪問多個(gè)redis庫方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
超詳細(xì)介紹idea中java程序打jar包的兩種方式
這篇文章主要介紹了超詳細(xì)介紹idea中java程序打jar包的兩種方式一種是可直接執(zhí)行的runnable jar文件,另一種是包含多個(gè)主類,運(yùn)行時(shí)需要指定主類全類名的jar包,感興趣的可以了解一下2020-07-07
Tk.mybatis零sql語句實(shí)現(xiàn)動態(tài)sql查詢的方法(4種)
有時(shí)候,查詢數(shù)據(jù)需要根據(jù)條件使用動態(tài)查詢,這時(shí)候需要使用動態(tài)sql,本文主要介紹了Tk.mybatis零sql語句實(shí)現(xiàn)動態(tài)sql查詢的方法,感興趣的可以了解一下2021-12-12
java使用spring實(shí)現(xiàn)發(fā)送mail的方法
這篇文章主要介紹了java使用spring實(shí)現(xiàn)發(fā)送mail的方法,涉及java基于spring框架發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Java中關(guān)于String StringBuffer StringBuilder特性深度解析
這篇文章主要介紹了Java中關(guān)于String StringBuffer StringBuilder特性深度解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

