最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Token過期實現(xiàn)自動續(xù)期的方法步驟

 更新時間:2026年05月29日 09:31:58   作者:海棠Flower未眠  
本文詳細(xì)解析了Token在防止表單重復(fù)提交、身份驗證及過期處理中的應(yīng)用,涵蓋Token的生成流程、過期機制及續(xù)期方案,特別介紹了單token與雙token兩種策略,需要的朋友可以參考下

相信小伙伴對Token再熟悉不過了,token主要有兩個作用:

一、Token的作用

1.防止表單重復(fù)提交

防止表單重復(fù)提交一般還是使用前后端都限制的方式。比如:在前端點擊提交之后,將按鈕置為灰色,不可再次點擊,然后客戶端和服務(wù)端的token各自獨立存儲,客戶端存儲在Cookie或者Form的隱藏域中,服務(wù)端存儲在Session或者其他緩存系統(tǒng)中。

2.用來作身份驗證(流程)

① 客戶端使用用戶名跟密碼請求登錄;

②通過ajax向后端發(fā)送請求;

③服務(wù)端收到請求,去驗證用戶名與密碼;

④驗證成功后,服務(wù)端會簽發(fā)一個 Token,再把這個 Token 發(fā)送給客戶端;

⑤客戶端收到 Token 以后可以把它存儲起來,比如放在 Cookie 里或者 Local Storage 里;

⑥客戶端每次向服務(wù)端請求資源的時候需要帶著服務(wù)端簽發(fā)的 Toke(不管是你自己寫的)它都要通過ajax向后端發(fā)送請求,這時服務(wù)端收到請求,然后去驗證客戶端請求里面帶著的 Token,如果驗證成功,就向客戶端返回請求的數(shù)據(jù)。

二、Token‌過期

Token‌過期通常意味著身份驗證的憑證已經(jīng)達(dá)到其設(shè)定的有效期,需要用戶重新進(jìn)行身份驗證或使用刷新Token來獲取新的訪問Token。 

這種情況通常發(fā)生在以下幾種情境中:

  • 安全性:為了防止Token被長期使用,設(shè)置過期時間可以減少因Token被竊取或泄露而帶來的安全風(fēng)險。
  • 數(shù)據(jù)一致性:Token的過期可以幫助確保服務(wù)器上的用戶數(shù)據(jù)與Token中攜帶的數(shù)據(jù)保持一致,避免因Token長期有效而導(dǎo)致的數(shù)據(jù)不同步問題。
  • 性能優(yōu)化:長時間有效的Token會增加網(wǎng)絡(luò)傳輸?shù)拈_銷和服務(wù)器的處理負(fù)擔(dān),通過設(shè)置過期時間,可以優(yōu)化系統(tǒng)性能。

處理Token過期的方法包括:

  • 重新獲取授權(quán)碼:用戶需要與授權(quán)服務(wù)器交互以獲取新的訪問Token和(如果適用)刷新Token。
  • 使用刷新Token:如果應(yīng)用程序使用了刷新Token,可以通過它來請求新的訪問Token,從而避免用戶重新登錄。
  • 黑名單機制:通過維護(hù)一個黑名單,將無效的Token列入其中,以確保只有有效的Token才能被接受。

JWT token的 payload 部分是一個json串,是要傳遞數(shù)據(jù)的一組聲明,這些聲明被JWT標(biāo)準(zhǔn)稱為claims。

JWT標(biāo)準(zhǔn)里面定義的標(biāo)準(zhǔn)claim包括:

  • iss(Issuser):JWT的簽發(fā)主體;
  • sub(Subject):JWT的所有者;
  • aud(Audience):JWT的接收對象;
  • exp(Expiration time):JWT的過期時間;
  • nbf(Not Before):JWT的生效開始時間;
  • iat(Issued at):JWT的簽發(fā)時間;
  • jti(JWT ID):是JWT的唯一標(biāo)識。

除了以上標(biāo)準(zhǔn)聲明以外,我們還可以自定義聲明。以 com.auth0 為例,下面代碼片段實現(xiàn)了生成一個帶有過期時間的token。

String token = JWT.create()
    .withIssuer(ISSUER)
    .withIssuedAt(new Date(currentTime))// 簽發(fā)時間
    .withExpiresAt(new Date(currentTime + EXPIRES_IN * 1000 * 60))// 過期時間戳
    .withClaim("username", username)//自定義參數(shù)
    .sign(Algorithm.HMAC256(user.getPassword()));

其中:

  • withIssuer() 設(shè)置簽發(fā)主體;
  • withIssuedAt() 設(shè)置簽發(fā)時間;
  • withExpiresAt() 設(shè)置過期時間戳,過期的時長為 EXPIRES_IN (單位秒);
  • withClaim() 設(shè)置自定義參數(shù)。

JWT設(shè)置了過期時間以后,一定超過,那么接口就不能訪問了,需要用戶重新登錄獲取token。如果經(jīng)常需要用戶重新登錄,顯然這種體驗不是太好,因此很多應(yīng)用會采用token過期后自動續(xù)期的方案,只有特定條件下才會讓用戶重新登錄。

三、token過期的續(xù)期方案

解決token過期的續(xù)期問題可以有很多種不同的方案,這里舉一些比較有代表性的例子。首先我們看一個單token方案,這個方案除了可以實現(xiàn)token續(xù)期以外,還可以實現(xiàn)某些條件下的強制重新登錄。

3.1.單token方案

  • 將 token 過期時間設(shè)置為15分鐘;
  • 前端發(fā)起請求,后端驗證 token 是否過期;如果過期,前端發(fā)起刷新token請求,后端為前端返回一個新的token;
  • 前端用新的token發(fā)起請求,請求成功;
  • 如果要實現(xiàn)每隔72小時,必須重新登錄,后端需要記錄每次用戶的登錄時間;用戶每次請求時,檢查用戶最后一次登錄日期,如超過72小時,則拒絕刷新token的請求,請求失敗,跳轉(zhuǎn)到登錄頁面。

另外后端還可以記錄刷新token的次數(shù),比如最多刷新50次,如果達(dá)到50次,則不再允許刷新,需要用戶重新授權(quán)。

上面介紹的單token方案原理比較簡單。下面我們再看一個雙token方案。

3.2.雙token方案

  • 登錄成功以后,后端返回 access_token 和 refresh_token,客戶端緩存此兩種token;
  • 使用 access_token 請求接口資源,成功則調(diào)用成功;如果token超時,客戶端攜帶 refresh_token 調(diào)用token刷新接口獲取新的 access_token;
  • 后端接受刷新token的請求后,檢查 refresh_token 是否過期。如果過期,拒絕刷新,客戶端收到該狀態(tài)后,跳轉(zhuǎn)到登錄頁;如果未過期,生成新的 access_token 返回給客戶端。
  • 客戶端攜帶新的 access_token 重新調(diào)用上面的資源接口。
  • 客戶端退出登錄或修改密碼后,注銷舊的token,使 access_token 和 refresh_token 失效,同時清空客戶端的 access_token 和 refresh_toke。

微信網(wǎng)頁授權(quán)是通過OAuth2.0機制實現(xiàn)的,也使用了雙token方案。

微信網(wǎng)頁授權(quán)方案:

  • 用戶在第三方應(yīng)用的網(wǎng)頁上完成微信授權(quán)以后,第三方應(yīng)用可以獲得 code(授權(quán)碼)。code的超時時間為10分鐘,一個code只能成功換取一次access_token即失效。
  • 第三方應(yīng)用通過code獲取網(wǎng)頁授權(quán)憑證access_token和刷新憑證 refresh_token。
  • access_token是調(diào)用授權(quán)關(guān)系接口的調(diào)用憑證,由于access_token有效期(2個小時)較短,當(dāng)access_token超時后,可以使用refresh_token進(jìn)行刷新。
  • refresh_token擁有較長的有效期(30天),當(dāng)refresh_token失效的后,需要用戶重新授權(quán)。

后端實現(xiàn)token過期還可以利用Redis來存儲token,設(shè)置redis的鍵值對的過期時間。如果發(fā)現(xiàn)redis中不存在token的記錄,說明token已經(jīng)過期了。

以上就是Token過期實現(xiàn)自動續(xù)期的方法步驟的詳細(xì)內(nèi)容,更多關(guān)于Token過期自動續(xù)期的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java Spring @Autowired的這些騷操作,你都知道嗎

    Java Spring @Autowired的這些騷操作,你都知道嗎

    這篇文章主要介紹了徹底搞明白Spring中的自動裝配和Autowired注解的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • Spring Boot從項目搭建到CRUD實戰(zhàn)案例

    Spring Boot從項目搭建到CRUD實戰(zhàn)案例

    這篇文章主要介紹了超詳細(xì)Spring Boot實戰(zhàn)案例從項目搭建到CRUD全實現(xiàn),本文基于一套完整的Spring Boot實戰(zhàn)代碼,從項目架構(gòu)、核心模塊解析、運行配置到接口測試,全方位拆解了Spring Boot整合MyBatis實現(xiàn)數(shù)據(jù)交互與接口開發(fā)的全過程,需要的朋友可以參考下
    2026-02-02
  • Java Swing JCheckBox復(fù)選框的實現(xiàn)方法

    Java Swing JCheckBox復(fù)選框的實現(xiàn)方法

    這篇文章主要介紹了Java Swing JCheckBox復(fù)選框的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring-Bean創(chuàng)建對象的步驟方式詳解

    Spring-Bean創(chuàng)建對象的步驟方式詳解

    在本篇文章里小編給大家分享的是關(guān)于Spring-Bean創(chuàng)建對象的步驟方式詳解內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2020-02-02
  • SpringCloud使用logback日志框架教程詳解

    SpringCloud使用logback日志框架教程詳解

    Logback是一個功能強大的日志框架,它是一個基于slf4j的日志系統(tǒng),提供了可靠的日志服務(wù),比log4j更快,更靈活,更容易使用。本文將教會你快速讓你的項目集成logback日志框架,需要的朋友可以參考下
    2023-05-05
  • Springboot項目優(yōu)雅地處理日志的方法詳解

    Springboot項目優(yōu)雅地處理日志的方法詳解

    這篇文章主要介紹了Springboot項目---優(yōu)雅地處理日志,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 詳解如何在SpringBoot項目中使用全局異常處理

    詳解如何在SpringBoot項目中使用全局異常處理

    在完整的項目開發(fā)中,異常的出現(xiàn)幾乎是無法避免的;如果凡是有可能出現(xiàn)異常的地方,我們都手動的使用try-catch將其捕獲的話,會使得代碼顯得十分臃腫并且后期不好維護(hù)。本文介紹了pringBoot項目中使用全局異常處理的方法,需要的可以參考一下
    2022-10-10
  • 避免sql注入_動力節(jié)點Java學(xué)院整理

    避免sql注入_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了避免sql注入,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java文件管理操作的知識點整理

    Java文件管理操作的知識點整理

    這篇文章主要為大家詳細(xì)介紹了Java中文件管理操作的一些知識點和實現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • Java設(shè)計模式中的適配器模式詳解

    Java設(shè)計模式中的適配器模式詳解

    適配器模式(Adapter),是Java23種設(shè)計模式中的結(jié)構(gòu)型模式之一,它可以將新的功能和原先的功能連接起來,使由于需求變動導(dǎo)致不能用的功能,重新利用起來,本文將詳細(xì)聊一聊Java適配器的運用場景和使用方法,感興趣的同學(xué)可以跟著小編一起來學(xué)習(xí)
    2023-05-05

最新評論

平罗县| 宝应县| 崇义县| 河南省| 聂拉木县| 石屏县| 和平县| 苏尼特右旗| 班戈县| 清原| 仁怀市| 富宁县| 德州市| 临西县| 南丹县| 武川县| 朝阳市| 都兰县| 濉溪县| 乌鲁木齐县| 全州县| 江永县| 阳城县| 庆安县| 皋兰县| 高青县| 定安县| 德钦县| 西和县| 荔浦县| 若尔盖县| 津市市| 铜梁县| 广汉市| 武平县| 清远市| 潮安县| 怀来县| 时尚| 宜良县| 广安市|