壹個JWT由三部分組成:
Header(頭部) —— base64編碼的Json字符串
Payload(載荷) —— base64編碼的Json字符串
Signature(簽名)—— 使用指定算法,通過Header和Payload加鹽計算的字符串
各部分以" . "分割,如:
直接通過base64解碼可獲得
Header:
Payload:
本文基於:
Jwts.builder() 返回了壹個 DefaultJwtBuilder()
DefaultJwtBuilder屬性
DefaultJwtBuilder包含了壹些Header和Payload的壹些常用設置方法
如果即不設置簽名,也不進行壓縮,header是不是就應該沒有了呢?
不是。即時不進行簽名,alg也應該存在,不然對其進行解析會出錯。
在生成jwt的時候,如果不設置簽名,那麽header中的alg應該為none。jjwt中compact()方法實現如下:
即
還提供了 JWT標準 7個保留聲明(Reserved claims)的設置方法,7個聲明都是可選的,也就是說可以不用設置。
Payload 舉例:
當然也可以在Payload中添加壹些自定義的屬性claims鍵值對
jjwt實現的 DefaultJwtSigner 提供了壹個帶工廠參數的構造方法。並將jjwt實現的 DefaultSignerFactory
靜態實例傳入,根據不同的簽名算法創建對應的簽名器進行簽名。