jjwt使用說明-筆記

jjwt官網鏈接:https://github.com/jwtk/jjwt

POM 依賴

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.3</version>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.12.3</version><scope>runtime</scope>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred --><version>0.12.3</version><scope>runtime</scope>
</dependency>
<!-- Uncomment this next dependency if you are using:
- JDK 10 or earlier, and you want to use RSASSA-PSS (PS256, PS384, PS512) signature algorithms.  
- JDK 10 or earlier, and you want to use EdECDH (X25519 or X448) Elliptic Curve Diffie-Hellman encryption.
- JDK 14 or earlier, and you want to use EdDSA (Ed25519 or Ed448) Elliptic Curve signature algorithms.    
It is unnecessary for these algorithms on JDK 15 or later.
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId> or bcprov-jdk15to18 on JDK 7
<version>1.76</version>
<scope>runtime</scope>
</dependency>
-->

生成token

PS: 基本和java-jwt使用一致。只是最新的jjwt舍棄了一些api,換了新的api

① 標準載荷:
JwtBuilder為JWT規范中定義的標準載荷提供了方便的構建器方法。
● issuer: sets the iss(Issuer) Claim jwt簽發者
● subject: sets the sub(Subject) Claim jwt針對的用戶
● audience: sets the aud(Audience) Claim 校驗jwt的一方
● expiration: sets the exp(Expiration Time) Claim jwt過期時間
● notBefore: sets the nbf(Not Before) Claim 定義在某個時間前該jwt是不可用的
● issuedAt: sets the iat(Issued At) Claim 簽發時間
● id: sets the jti(JWT ID) Claim jwt的唯一身份標識,作一次性token,防重放攻擊。
② 自定義載荷:
● claime(key,value)
● claime(Map對象)

// 創建token密鑰的key,并且使用 HMAC-SHA-256 加密算法
private static SecretKey key = Jwts.SIG.HS256.key().build();/*** 生成token* @return*/
public static String genToken(){// 2. 構建jwt,將簽發人設置為joe,并且使用密鑰將簽名jwt生成為jwsString jws =  Jwts.builder().subject("Joe").  // setSubject 設置jwt針對的用戶issuer("張三").   // issuer 簽發人claim("name","zhangsan"). // 自定義載荷數據claim("role","admin"). // 自定義載荷數據signWith(key).   // token加簽認證expiration(new Date(System.currentTimeMillis()+7200*1000)). // 設置token過期時間為2Hcompact();  // 生成token字符串return jws;
}

生成token的兩句核心代碼:

SecretKey key = Jwts.SIG.HS256.key().build();
Jwts.builder().setSubject("Joe").signWith(key).compact();

驗證解析token

 /*** token 校驗* @param key  密鑰* @param token jws* @return*/
public static String checkToken(SecretKey key,String token ){String msg = null;try {Jws<Claims> claimsJws = Jwts.parser().verifyWith(key).build().parseSignedClaims(token);// 獲取載荷的一些數據信息Claims payload = claimsJws.getPayload(); // payload 為一個map對象String issuer = payload.getIssuer();Date expiration = payload.getExpiration();String name = (String)payload.get("name");String role = (String)payload.get("role");// 測試就直接打印出去了...System.out.println("標準載荷:issuer===>"+issuer+"\texpiration=>"+expiration + "自定義載荷數據:"+name+"\t"+role);return "token正確";} catch (SignatureException se) {msg = "密鑰錯誤";return  msg;}catch (MalformedJwtException me) {msg = "密鑰算法或者密鑰轉換錯誤";return  msg;}catch (MissingClaimException mce) {msg = "密鑰缺少校驗數據";return  msg;}catch (ExpiredJwtException mce) {msg = "密鑰已過期";return  msg;}catch (JwtException jwte) {msg = "密鑰解析錯誤";return  msg;}
}

完整代碼

package jwt_test;import io.jsonwebtoken.*;
import io.jsonwebtoken.security.SignatureException;
import javax.crypto.SecretKey;
import java.util.Date;/*** jjwt*/
public class JJwtUtils {// 創建token密鑰的key,并且使用 HMAC-SHA-256 加密算法private static SecretKey key = Jwts.SIG.HS256.key().build();/*** 生成token* @return*/public static String genToken(){// 2. 構建jwt,將簽發人設置為joe,并且使用密鑰將簽名jwt生成為jwsString jws =  Jwts.builder().subject("Joe").  // setSubject 設置jwt針對的用戶issuer("張三").   // issuer 簽發人claim("name","zhangsan"). // 自定義載荷數據claim("role","admin"). // 自定義載荷數據signWith(key).   // token加簽認證expiration(new Date(System.currentTimeMillis()+7200*1000)). // 設置token過期時間為2Hcompact();  // 生成token字符串return jws;}/*** token 校驗* @param key  密鑰* @param token jws* @return*/public static String checkToken(SecretKey key,String token ){String msg = null;try {Jws<Claims> claimsJws = Jwts.parser().verifyWith(key).build().parseSignedClaims(token);// 獲取載荷的一些數據信息Claims payload = claimsJws.getPayload(); // payload 為一個map對象String issuer = payload.getIssuer();Date expiration = payload.getExpiration();String name = (String)payload.get("name");String role = (String)payload.get("role");// 測試就直接打印出去了...System.out.println("標準載荷:issuer===>"+issuer+"\texpiration=>"+expiration + "自定義載荷數據:"+name+"\t"+role);return "token正確";} catch (SignatureException se) {msg = "密鑰錯誤";return  msg;}catch (MalformedJwtException me) {msg = "密鑰算法或者密鑰轉換錯誤";return  msg;}catch (MissingClaimException mce) {msg = "密鑰缺少校驗數據";return  msg;}catch (ExpiredJwtException mce) {msg = "密鑰已過期";return  msg;}catch (JwtException jwte) {msg = "密鑰解析錯誤";return  msg;}}/*** 	測試*/public static void main(String[] args) {String token = genToken();System.out.println(token);// 斷言測試// assert Jwts.parser().verifyWith(key).build().parseSignedClaims(token).getPayload().getSubject().equals("Joe");String res = checkToken(key, token);System.out.println(res);}}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164916.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164916.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164916.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華納云:linux中vsz和rss有哪些區別

在Linux中&#xff0c;VSZ(Virtual Set Size)和RSS(Resident Set Size)是兩個用于描述進程內存使用的指標&#xff0c;它們表示不同方面的內存情況。 1. VSZ&#xff08;Virtual Set Size&#xff09;: VSZ 表示進程的虛擬內存大小。 包括進程使用的所有內存&#xff0c;包括實…

Python中的函數

一、函數參數與返回值基礎知識 1、不要使用可變類型&#xff08;list等&#xff09;作為參數默認值&#xff0c;用None來代替。 參數默認值只會在函數定義階段被創建一次&#xff0c;之后無論創建多少次&#xff0c;函數內拿到的默認值都是同一個對象&#xff0c;為規避這個問…

Vue 2.0源碼分析-數據驅動

Vue.js 一個核心思想是數據驅動。所謂數據驅動&#xff0c;是指視圖是由數據驅動生成的&#xff0c;我們對視圖的修改&#xff0c;不會直接操作 DOM&#xff0c;而是通過修改數據。它相比我們傳統的前端開發&#xff0c;如使用 jQuery 等前端庫直接修改 DOM&#xff0c;大大簡化…

【python學習】基礎篇-常用模塊-collections模塊:數據結構,如列表、元組、字典和集合等

Python中的collections模塊提供了一些有用的數據結構&#xff0c;如列表、元組、字典和集合等。 以下是collections模塊中一些常用數據結構的用法&#xff1a; Counter類 Counter類是一個字典子類&#xff0c;用于計數可哈希對象。 它可以接受一個可迭代對象作為參數&#xff…

Atlassian Confluence 路徑遍歷和命令執行漏洞 (CVE-2019-3396)

漏洞描述 Confluence 是由澳大利亞軟件公司 Atlassian 開發的基于 Web 的企業 wiki。 Atlassian Confluence 6.14.2 版本之前存在一個未經授權的目錄遍歷漏洞&#xff0c;攻擊者可以使用 Velocity 模板注入讀取任意文件或執行任意命令。 漏洞環境及漏洞利用 啟動docker環境…

快來考試拿證書!KubeSphere 個人技能專業考試認證上線啦!

以容器技術和容器編排為基礎的云原生應用&#xff0c;被越來越多的企業用戶接受和使用&#xff0c;并且在生產環境中使用容器技術的比例逐年增加。Kubernetes 無疑已經成為容器編排的事實基礎&#xff0c;而依托于 Kubernetes 開發的開源容器平臺 KubeSphere 也收獲了一眾擁躉。…

vue3使用provider+ inject直接將參數由祖宗傳送給孫子

如題。在vue項目中&#xff0c;如果祖宗想將參數傳遞給孫子甚至更小一輩的組件&#xff0c;是一件麻煩事。可以通過爺爺-兒子-孫子-曾孫這樣的鏈條&#xff0c;一輩輩地傳承下去&#xff0c;但未免太繁瑣、太蠢了些&#xff1b;也可以通過store間接傳送&#xff0c;但如何觸發孫…

9-什么是迭代器,生成器,裝飾器、django的信號用過嗎?如何用,干過什么、什么是深拷貝,什么是淺拷貝,如何使用、slice操作符和list構造函數

1 什么是迭代器&#xff0c;生成器&#xff0c;裝飾器 2 django的信號用過嗎&#xff1f;如何用&#xff0c;干過什么 3 什么是深拷貝&#xff0c;什么是淺拷貝&#xff0c;如何使用 3.1 淺拷貝 3.2 深拷貝 3.3 擴展(slice操作符和list構造函數) 1 什么是迭代器&#xff0c;生成…

14 redis全量復制與部分復制

1、設置主服務器的地址和端口 首先是在從服務器設置需要同步的主服務器信息&#xff0c;包括機器IP, 端口。 主從復制的開啟&#xff0c;完全是在從節點發起的。不需要我們在主節點做任何事情。 從節點開啟主從復制&#xff0c;有3種方式 配置文件&#xff1a;在從服務器的配…

【神印王座】龍皓晨美妝勝過月夜,魔神皇識破無視,撮合月夜阿寶

Hello,小伙伴們&#xff0c;我是拾荒君。 《神印王座》國漫第82集已更新&#xff0c;拾荒君和大多數人一樣&#xff0c;更新就去看了。魔神皇楓秀&#xff0c;威嚴凜然&#xff0c;突然空降月魔宮&#xff0c;整個宮殿都在這股無與倫比的強大氣息中顫栗。為了順利躲避魔神皇的…

稻谷飄香金融助力——建行江門市分行助力鄉村振興

7月的臺山&#xff0c;稻谷飄香。在大耕戶李勝業的農田里&#xff0c;金燦燦的稻谷翻起層層稻浪&#xff0c;收割機在稻浪里來回穿梭&#xff0c;割稻、脫粒、裝車等工序一氣呵成。空氣中彌漫著豐收的喜悅。 夏糧迎豐收的背后&#xff0c;是中國建設銀行江門市分行&#xff08…

遠端WWW服務支持TRACE請求

安全掃描的時候&#xff0c;掃出來的問題&#xff0c;這里不分享如何處理&#xff0c;就只分享下&#xff0c;如何找到有問題的端口。 通過命令 curl -v -X TRACE -I ip:port&#xff0c;這里的ip和端口就是掃描出有問題的服務器地址ip以及開放的服務端口。 觀察返回值&#x…

Python基礎:生成器(Generators)和生成器表達式(Generator Expressions)詳解

生成器&#xff08;Generators&#xff09;和 生成器表達式&#xff08;Generator Expressions&#xff09;是 Python 中用于處理迭代器和序列數據的強大工具。它們允許你按需生成值&#xff0c;而不是一次性生成所有值&#xff0c;從而節省內存和提高性能。 1. 生成器&#x…

深度強化學習筆記與無線通信應用案例

這里寫自定義目錄標題 參考資料比較和分類基礎知識16.3 有模型學習16.3.1 策略評估遞歸形式&#xff1a;Bellman 等式 16.3.2 策略改進16.3.3 策略迭代16.3.3 值迭代 16.4 免模型學習on-policy off-policy16.4.1 蒙特卡羅強化學習16.4.2 時序差分學習Sarsa算法&#xff1a;同策…

睡前隨筆記錄

一個人從出生到長大&#xff0c;就像一部手機從新用到舊。手機里面積累了太多的緩存&#xff0c;積累了太多的照片&#xff0c;各種app的數據&#xff0c;安裝了各式各樣的程序。 所以大概這就是年紀越大&#xff0c;記性越差的原因嗎&#xff1f;就像一個屋子&#xff0c;堆滿…

TableStructureRec: 表格結構識別推理庫來了

目錄 引言lineless_table_rec: 無線表格識別庫安裝使用結果 wired_table_rec&#xff1a;有線表格識別庫安裝使用結果 寫在最后 引言 TableStructureRec 倉庫是用來對文檔中表格做結構化識別的推理庫&#xff0c;包括來自 PaddleOCR 的表格結構識別算法模型、來自阿里讀光有線…

新版Testwell CTC++代碼覆蓋率測試工具帶來哪些新變化?

代碼覆蓋率測試工具Testwell CTC在版本10中引入了新的工具ctcreport來直接從符號和數據文件生成HTML報告。詳細的特性描述可以在測試井CTC幫助中找到。在本文檔中&#xff0c;描述了與前一代報告相比的改進和變化。 Adaptable Layout可調整布局 您可以選擇一個適合于項目結構的…

scanf的返回值

總所周知&#xff0c;scanf是C提供的庫函數的內容&#xff0c;而絕大多數定義的函數都會有一個返回值。 那么scanf的返回值是什么呢&#xff1f; 查了CPP的解釋后&#xff0c;返回值就是返回的是scanf讀取的數據的個數。 這個概念可能比較抽象。先看如下示例&#xff1a; 我們…

QT QJsonObject 插入 QByteArray十六進制數據

場景描述 有一組十六進制數使用QByteArray進行存儲&#xff1b;需要將其插入QJsonObject&#xff0c;然后通過網絡發送出去&#xff1b;接收到后&#xff0c;再轉換回QByteArray&#xff1b; 操作代碼 1. QByteArray轉換QString插入QJsonObject QString str ""; …

io500 壓測

目的 編譯環境 centos 7.9安裝包 yum groupinstall Development\ Tools yum install -y libevent-devel hwloc-devel libcephfs-devel.x86_64 編譯 open mpi 下載地址 https://www.open-mpi.org/software/ompi/v5.0/編譯 rpmbuild --rebuild openmpi-4.1.6-1.src.rpm安裝…