91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JWT設置token過期時間無效怎么解決

發布時間:2022-07-13 14:15:05 來源:億速云 閱讀:1286 作者:iii 欄目:開發技術

這篇文章主要介紹了JWT設置token過期時間無效怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇JWT設置token過期時間無效怎么解決文章都會有所收獲,下面我們一起來看看吧。

JWT 設置token過期時間無效

原因

設置超時時間的順序有誤, 應調用setClaims()方法設置claims屬性。

在調用setExpiration()方法設置超時時間。

Date expiresDate = new Date(System.currentTimeMillis() + expire_time);// expire_time為token有效時長, 單位毫秒

錯誤順序示例: 

JwtBuilder result = Jwts.builder()
                .setExpiration(date) // 超時時間設置在 setClaims之前
        .setClaims(claims) 
        .signWith(SignatureAlgorithm.HS256, Constants.BASE64SECRET);

正確順序示例:

JwtBuilder result = Jwts.builder()
        .setClaims(claims) // 先調用setClaims, 在調用setExpiration
        .setExpiration(date)
        .signWith(SignatureAlgorithm.HS256, Constants.BASE64SECRET);


 

原因分析

//io.jsonwebtoken.impl.DefaultJwtBuilder#setExpiration 中代碼
    @Override
    public JwtBuilder setExpiration(Date exp) {
        if (exp != null) {
            // 設置的時間不為空,就調用ensureClaims方法
            ensureClaims().setExpiration(exp);
        } else {
            if (this.claims != null) {
                //noinspection ConstantConditions
                this.claims.setExpiration(exp);
            }
        }
        return this;
    }
 
 
// io.jsonwebtoken.impl.DefaultJwtBuilder#ensureClaims 中代碼
    protected Claims ensureClaims() {
        // 如果claims為null, 則創建新的示例。 此處沒有問題
        if (this.claims == null) {
            this.claims = new DefaultClaims();
        }
        return this.claims;
    }
 
// io.jsonwebtoken.impl.DefaultJwtBuilder#setClaims(io.jsonwebtoken.Claims) 中代碼
    @Override
    public JwtBuilder setClaims(Claims claims) {
        // 直接給claims賦值, 這里個操作覆蓋了之前設置的超時時間,
        // 導致最終構造token時, 沒有設置超時時間
        this.claims = claims;
        return this;
    }

JWT token過期自動續期解決方案

JWT

JWT全稱JSON Web Token,由三部分組成header(頭部,用于描述關于該JWT的最基本的信息,例如其類型以及簽名所用的算法等)、payload(載荷,就是存放有效信息的地方,在這一部分中存放過期時間)和signature(簽證,簽證信息)。

token

token就是后端生成的JWT字符串值,在前后端分離中,token是前端訪問后端接口的合法身份、權限的憑證。

token過期刷新方案

1、單點登錄

用戶登錄,后端驗證用戶成功之后生成兩個token,這兩個token分別是access_token(訪問接口使用的token)、refresh_token(access_token過期后用于刷續期的token,注意設置refresh_token的過期時間需比access_token的過期時間長),后端將用戶信息和這兩個token存放到redis中并返回給前端。

前端在獲取到登錄成功返回的兩個token之后,將之存放到localStorage本地存儲中。

2、接口請求

前端封裝統一接口請求函數、token刷新函數,在請求成功之后對返回結果進行校驗,如果token過期,則調用token刷新函數請求新的token.

后端在接收到token刷新請求之后通過結合redis中存放的用戶信息、token和refresh_token對請求參數進行驗證,驗證通過之后生成新的token和refresh_token存放到redis中并返回給前端。至此完成token刷新。

3、多請求應對

所謂多請求,就是指在短時間內同時發生多個請求,如果此時token已經過期,那么這些請求都會出現token過期請求失敗的情況。

為了避免反復刷新token,需要設置一個刷新token的開關isRefresh,當一個請求出現token過期的時候,這個時候會調用token刷新函數,與此同時關閉開關將isRefresh的值設置為false,避免后續請求去調用token刷新函數。

當發現token過期時,咱們將請求延緩到token刷新之后再重新執行請求,這里采用Promise函數,把每一個token失效的請求都存到一個Promise函數集合里面,當token刷新之后打開開關將isRefresh的值設置為true,然后批量執行Promise函數集合里面的Promise函數,返回請求結果。

關于“JWT設置token過期時間無效怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“JWT設置token過期時間無效怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太谷县| 类乌齐县| 富顺县| 霞浦县| 吴堡县| 噶尔县| 云阳县| 津南区| 绥江县| 克什克腾旗| 盈江县| 望奎县| 冷水江市| 张家口市| 湖南省| 陆丰市| 旬阳县| 锦州市| 郯城县| 天全县| 叙永县| 神农架林区| 芒康县| 通江县| 田林县| 宁乡县| 浏阳市| 南通市| 通榆县| 沈阳市| 且末县| 长宁县| 宜兴市| 昭觉县| 北辰区| 察隅县| 天镇县| 淮阳县| 峨山| 新兴县| 澎湖县|