關於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。
推薦閱讀:
- 淺談node使用jwt生成的token應該存在哪裡
- 一文掌握Java中的JWT
- 關於JWT與cookie和token的區別說明
- Java Jwt庫的簡介及使用詳解
- SpringBoot整合JWT Token的完整步驟