jwt token實例操作


最近在做一個app,登錄驗證是用的jwt的token驗證,今天來記錄一下......

我的本次實例操作主要參考了下面資料

https://jwt.io/introduction/

https://blog.csdn.net/jikeehuang/article/details/51488020

https://www.cnblogs.com/ganchuanpu/archive/2017/05/17/6870240.html

https://www.cnblogs.com/xiekeli/p/5607107.html

https://blog.csdn.net/superdog007/article/details/80704234

下面是具體步驟:

1.添加jar包

然后是jwt token的具體實現

三個常量分別是

  保存在服務端的密鑰,

  jwt令牌的有效時間

    刷新令牌的有效時間

jwt內置了許多加密編碼,我這里采用Hs256加密,將自己設定的特有密碼進行base編碼,生成一個key

這一段是生成一個usertoken,

jwt token包含三部分 分別是header,payload(載荷),sign(簽名)

header用來設置自己token的類型和使用的編碼,payload存放用戶的安全信息,因為jwt提供的編碼是可逆的,所以不要存放用戶的關鍵信息

sign是token的一個簽名,由headr,payload以及key決定,當客戶端發來一個key的時候,只要校驗簽名是否正確即可

 

這一段代碼和上一張圖在同一個方法內,主要用於實現令牌的刷新,本來刷新時間應該存放在redis里,但是我條件有限,只能先存放在數據庫中

 

token的校驗從傳來的token中獲得載荷payload,重新生成一個token,拿到新token的簽名sign,將新的sign和舊sign比較,當兩個sign一致時則通過驗證

這一段代碼和上一段在同一個方法內,當連個sign不一致時說明客戶端token被篡改,直接返回一個null,在攔截器中做判斷當為null時直接回到登陸界面

當t oken過期 ExpiredJwtException e 會自動捕獲,我們在捕獲到這個異常時,進行令牌的刷新,然后返回這個新的令牌

兩個sign一致就直接返回原先的token。

令牌的刷新將之前存放在數據中刷新有效時間取出,與當前時間進行比較,如果小於當前的刷新有效時間則刷新令牌,然后更新數據庫,返回新的token字符串,

如果該用戶連已經長時間未使用app,導致當前時間已經超過了令牌刷新的時間,則刪除數據庫中的對應數據,token返回null;

客戶端的token是放在request的header中發到后台的,所以需要從heaer中取出

 

 拿到的token是這樣子的,所以需要對這個字符串按照空格截取,拿到真正有用的token

我們拿到校驗返回過來的字符串,當這個字符串為空時,客戶端返回到登陸界面

當兩個token不相等時,說明校驗傳回來的token是新的,那么我們修改響應頭中token為新的token,然后程序繼續執行

........

第一次使用jwt,對jwt安全性還很不了解......只能先這樣了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM