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

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

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

相信小伙伴對(duì)Token再熟悉不過了,token主要有兩個(gè)作用:

一、Token的作用

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

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

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

① 客戶端使用用戶名跟密碼請(qǐng)求登錄;

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

③服務(wù)端收到請(qǐng)求,去驗(yàn)證用戶名與密碼;

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

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

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

二、Token‌過期

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

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

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

處理Token過期的方法包括:

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

JWT token的 payload 部分是一個(gè)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的接收對(duì)象;
  • exp(Expiration time):JWT的過期時(shí)間;
  • nbf(Not Before):JWT的生效開始時(shí)間;
  • iat(Issued at):JWT的簽發(fā)時(shí)間;
  • jti(JWT ID):是JWT的唯一標(biāo)識(shí)。

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

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

其中:

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

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

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

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

3.1.單token方案

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

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

上面介紹的單token方案原理比較簡(jiǎn)單。下面我們?cè)倏匆粋€(gè)雙token方案。

3.2.雙token方案

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    Springboot項(xiàng)目?jī)?yōu)雅地處理日志的方法詳解

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

    詳解如何在SpringBoot項(xiàng)目中使用全局異常處理

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

    避免sql注入_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

    Java文件管理操作的知識(shí)點(diǎn)整理

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

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

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

最新評(píng)論

沂水县| 广州市| 清镇市| 宝清县| 博乐市| 宁陵县| 定西市| 武冈市| 甘泉县| 佳木斯市| 阿克苏市| 广水市| 威宁| 将乐县| 德庆县| 通江县| 万州区| 马山县| 舞钢市| 青神县| 普格县| 海晏县| 水富县| 琼中| 浪卡子县| 青海省| 永州市| 齐河县| 工布江达县| 清原| 县级市| 仪陇县| 阿拉善盟| 黔南| 望奎县| 石景山区| 荣昌县| 莆田市| 黄陵县| 金山区| 加查县|