關於JwtToken使用-重點看一下過期時間

JwtToken使用

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

下面是具體步驟

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安全性還很不瞭解……隻能先這樣瞭

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: