關(guān)于JwtToken使用-重點(diǎn)看一下過(guò)期時(shí)間
JwtToken使用
最近在做一個(gè)app,登錄驗(yàn)證是用的jwt的token驗(yàn)證,今天來(lái)記錄一下.....
下面是具體步驟
1.添加jar包
然后是jwt token的具體實(shí)現(xiàn)
三個(gè)常量分別是
- 保存在服務(wù)端的密鑰
- jwt令牌的有效時(shí)間
- 刷新令牌的有效時(shí)間
jwt內(nèi)置了許多加密編碼,我這里采用Hs256加密,將自己設(shè)定的特有密碼進(jìn)行base編碼,生成一個(gè)key
這一段是生成一個(gè)usertoken
jwt token
包含三部分 分別是header,payload(載荷),sign(簽名)header
用來(lái)設(shè)置自己token的類型和使用的編碼,payload存放用戶的安全信息,因?yàn)閖wt提供的編碼是可逆的,所以不要存放用戶的關(guān)鍵信息sign
是token的一個(gè)簽名,由headr,payload以及key決定,當(dāng)客戶端發(fā)來(lái)一個(gè)key的時(shí)候,只要校驗(yàn)簽名是否正確即可
這一段代碼和上一張圖在同一個(gè)方法內(nèi),主要用于實(shí)現(xiàn)令牌的刷新,本來(lái)刷新時(shí)間應(yīng)該存放在redis里,但是我條件有限,只能先存放在數(shù)據(jù)庫(kù)中
token的校驗(yàn)從傳來(lái)的token中獲得載荷payload,重新生成一個(gè)token,拿到新token的簽名sign,將新的sign和舊sign比較,當(dāng)兩個(gè)sign一致時(shí)則通過(guò)驗(yàn)證
這一段代碼和上一段在同一個(gè)方法內(nèi),當(dāng)連個(gè)sign不一致時(shí)說(shuō)明客戶端token被篡改,直接返回一個(gè)null,在攔截器中做判斷當(dāng)為null時(shí)直接回到登陸界面
當(dāng)t oken過(guò)期 ExpiredJwtException e 會(huì)自動(dòng)捕獲,我們?cè)诓东@到這個(gè)異常時(shí),進(jìn)行令牌的刷新,然后返回這個(gè)新的令牌
兩個(gè)sign一致就直接返回原先的token。
令牌的刷新將之前存放在數(shù)據(jù)中刷新有效時(shí)間取出,與當(dāng)前時(shí)間進(jìn)行比較,如果小于當(dāng)前的刷新有效時(shí)間則刷新令牌,然后更新數(shù)據(jù)庫(kù),返回新的token字符串,
如果該用戶連已經(jīng)長(zhǎng)時(shí)間未使用app,導(dǎo)致當(dāng)前時(shí)間已經(jīng)超過(guò)了令牌刷新的時(shí)間,則刪除數(shù)據(jù)庫(kù)中的對(duì)應(yīng)數(shù)據(jù),token返回null;
客戶端的token是放在request的header中發(fā)到后臺(tái)的,所以需要從heaer中取出
拿到的token是這樣子的,所以需要對(duì)這個(gè)字符串按照空格截取,拿到真正有用的token
我們拿到校驗(yàn)返回過(guò)來(lái)的字符串,當(dāng)這個(gè)字符串為空時(shí),客戶端返回到登陸界面
當(dāng)兩個(gè)token不相等時(shí),說(shuō)明校驗(yàn)傳回來(lái)的token是新的,那么我們修改響應(yīng)頭中token為新的token,然后程序繼續(xù)執(zhí)行
........
第一次使用jwt,對(duì)jwt安全性還很不了解......只能先這樣了
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA2019.2.2配置Maven3.6.2打開(kāi)出現(xiàn)Unable to import Maven project
這篇文章主要介紹了IDEA2019.2.2配置Maven3.6.2打開(kāi)出現(xiàn)Unable to import Maven project,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12mybatis單元測(cè)試過(guò)程(無(wú)需啟動(dòng)容器)
在MyBatis中,單元測(cè)試無(wú)需啟動(dòng)容器即可進(jìn)行,主要涉及Configuration類、Executor接口及其實(shí)現(xiàn)類,以及XMLMapperBuilder的作用,Configuration類是配置的承載者,負(fù)責(zé)初始化并解析配置文件,Executor接口及其實(shí)現(xiàn)類2024-09-09testNG項(xiàng)目通過(guò)idea Terminal命令行執(zhí)行的配置過(guò)程
這篇文章主要介紹了testNG項(xiàng)目通過(guò)idea Terminal命令行執(zhí)行,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07Spring Boot Admin實(shí)現(xiàn)服務(wù)健康預(yù)警功能
這篇文章主要介紹了Spring Boot Admin實(shí)現(xiàn)服務(wù)健康預(yù)警功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05JDK動(dòng)態(tài)代理之ProxyGenerator生成代理類的字節(jié)碼文件解析
這篇文章主要為大家詳細(xì)介紹了JDK動(dòng)態(tài)代理之ProxyGenerator生成代理類的字節(jié)碼文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02SpringBoot集成Dubbo啟用gRPC協(xié)議
這篇文章主要介紹了SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫(xiě)過(guò)程中的區(qū)別。感興趣的同學(xué)可以參考閱讀2023-04-04jvm垃圾回收GC調(diào)優(yōu)基礎(chǔ)原理分析
談到調(diào)優(yōu),這一定是針對(duì)特定場(chǎng)景、特定目的的事情, 對(duì)于 GC 調(diào)優(yōu)來(lái)說(shuō),首先就需要清楚調(diào)優(yōu)的目標(biāo)是什么?從性能的角度看,通常關(guān)注三個(gè)方面,內(nèi)存占用(footprint)、延時(shí)(latency)和吞吐量(throughput)2022-01-01