最新jsonwebtoken-jwt 0.12.3 基本使用小結(jié)
Token是無狀態(tài)協(xié)議中認證用戶的一種形式,不受域名限制,而JWT只是一種實現(xiàn)形式,通過在客戶端存儲payload來降低服務端壓力。
TOKEN是一個寬泛的概念,翻譯為令牌, 是訪問資源的憑證。
JWT是json web token縮寫。用點號分為三段,分別表示頭、信息和簽名。可以使用在RESTFUL接口定義, 也可以使用在普通的web。它將用戶信息加密到token里,服務器不保存任何用戶信息。服務器通過密鑰驗證token的正確性,判斷是否通過驗證。
導入依賴
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.12.3</version> </dependency>
包括了下面三個依賴, 所以導入上面一個就OK了
<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>
之前很多方法都棄用了, 好多博文也還是用的廢棄的方法
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import io.jsonwebtoken.security.SecureDigestAlgorithm; import javax.crypto.SecretKey; import java.sql.Timestamp; import java.time.Instant; import java.util.Date; import java.util.UUID; /** * @author Tiam * @date 2023/10/23 16:38 * @description */ public class TokenUtil { /** * 過期時間(單位:秒) */ public static final int ACCESS_EXPIRE = 60; /** * 加密算法 */ private final static SecureDigestAlgorithm<SecretKey, SecretKey> ALGORITHM = Jwts.SIG.HS256; /** * 私鑰 / 生成簽名的時候使用的秘鑰secret,一般可以從本地配置文件中讀取,切記這個秘鑰不能外露,只在服務端使用,在任何場景都不應該流露出去。 * 一旦客戶端得知這個secret, 那就意味著客戶端是可以自我簽發(fā)jwt了。 * 應該大于等于 256位(長度32及以上的字符串),并且是隨機的字符串 */ private final static String SECRET = "secretKey"; /** * 秘鑰實例 */ public static final SecretKey KEY = Keys.hmacShaKeyFor(SECRET.getBytes()); /** * jwt簽發(fā)者 */ private final static String JWT_ISS = "Tiam"; /** * jwt主題 */ private final static String SUBJECT = "Peripherals"; /* 這些是一組預定義的聲明,它們 不是強制性的,而是推薦的 ,以 提供一組有用的、可互操作的聲明 。 iss: jwt簽發(fā)者 sub: jwt所面向的用戶 aud: 接收jwt的一方 exp: jwt的過期時間,這個過期時間必須要大于簽發(fā)時間 nbf: 定義在什么時間之前,該jwt都是不可用的. iat: jwt的簽發(fā)時間 jti: jwt的唯一身份標識,主要用來作為一次性token,從而回避重放攻擊 */ public static String genAccessToken(String username) { // 令牌id String uuid = UUID.randomUUID().toString(); Date exprireDate = Date.from(Instant.now().plusSeconds(ACCESS_EXPIRE)); return Jwts.builder() // 設(shè)置頭部信息header .header() .add("typ", "JWT") .add("alg", "HS256") .and() // 設(shè)置自定義負載信息payload .claim("username", username) // 令牌ID .id(uuid) // 過期日期 .expiration(exprireDate) // 簽發(fā)時間 .issuedAt(new Date()) // 主題 .subject(SUBJECT) // 簽發(fā)者 .issuer(JWT_ISS) // 簽名 .signWith(KEY, ALGORITHM) .compact(); } /** * 解析token * @param token token * @return Jws<Claims> */ public static Jws<Claims> parseClaim(String token) { return Jwts.parser() .verifyWith(KEY) .build() .parseSignedClaims(token); } public static JwsHeader parseHeader(String token) { return parseClaim(token).getHeader(); } public static Claims parsePayload(String token) { return parseClaim(token).getPayload(); } }
參考:
- https://github.com/jwtk/jjwt
- https://jwt.io/
- https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4
到此這篇關(guān)于最新jsonwebtoken-jjwt 0.12.3 基本使用的文章就介紹到這了,更多相關(guān)jsonwebtoken-jjwt 0.12.3 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot編寫CRUD時訪問對應數(shù)據(jù)函數(shù)返回null的問題及解決方法
我在學習springboot,其中在編寫CRUD時發(fā)現(xiàn)訪問數(shù)據(jù)的函數(shù)執(zhí)行下去返回值是null但是其它部分正常,這篇文章主要介紹了Springboot在編寫CRUD時,訪問對應數(shù)據(jù)函數(shù)返回null,需要的朋友可以參考下2024-02-02Spring?Cloud?OAuth2實現(xiàn)自定義token返回格式
Spring?Security?OAuth的token返回格式都是默認的,但是往往這個格式是不適配系統(tǒng)。本文將用一個接口優(yōu)雅的實現(xiàn)?Spring?Cloud?OAuth2?自定義token返回格式,需要的可以參考一下2022-06-06Java 實現(xiàn)漢字轉(zhuǎn)換為拼音的實例
這篇文章主要介紹了Java 實現(xiàn)漢字轉(zhuǎn)換為拼音的實例的相關(guān)資料,需要的朋友可以參考下2016-12-12Java Scaner類詳解_動力節(jié)點Java學院整理
Java.util.Scanner是Java5.0的新特征,主要功能是簡化文本掃描。下面通過本文給大家分享java scaner類相關(guān)知識,需要的朋友下吧2017-04-04JAVA中HTTP基本認證(Basic Authentication)實現(xiàn)
HTTP 基本認證是一種簡單的認證方法,本文主要介紹了JAVA中HTTP基本認證(Basic Authentication),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Spring?Mvc中CommonsMultipartFile的特性實例詳解
這篇文章主要給大家介紹了關(guān)于Spring?Mvc中CommonsMultipartFile特性的相關(guān)資料,SpringMVC擁有強大的靈活性,非侵入性和可配置性,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11