當前位置:首頁 » 編程語言 » jwtjava

jwtjava

發布時間: 2023-12-01 02:08:49

A. 如何在java 中創建和驗證JWT

用戶發起登錄請求,服務端創建一個加密後的jwt信息,作為token返回值,在後續請求中jwt信息作為請求頭,服務端正確解密後可獲取到存儲的用戶信息,表示驗證通過;解密失敗說明token無效或者已過期。
加密後jwt信息如下所示,是由.分割的三部分組成,分別為Header、Payload、Signature。
eyJhbGciOiJIUzI1NiJ9..vW-

Header包含兩部分信息,alg指加密類型,可選值為HS256、RSA等等,typ=JWT為固定值,表示token的類型。
{
"alg": "HS256",
"typ": "JWT"
}

Payload是指簽名信息以及內容,一般包括iss (發行者), exp (過期時間), sub(用戶信息), aud (接收者),以及其他信息,詳細介紹請參考官網。
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

Signature則為對Header、Payload的簽名。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

在jwt官網,可以看到有不同語言的實現版本,這里使用的是Java版的jjwt。話不多說,直接看代碼,加解密都很簡單:
/**
* 創建 jwt
* @param id
* @param subject
* @param ttlMillis
* @return
* @throws Exception
*/
public String createJWT(String id, String subject, long ttlMillis) throws Exception {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256 ;
long nowMillis = System. currentTimeMillis();
Date now = new Date( nowMillis);
SecretKey key = generalKey();
JwtBuilder builder = Jwts. builder()
.setId(id)
.setIssuedAt(now)
.setSubject(subject)
.signWith(signatureAlgorithm, key);
if (ttlMillis >= 0){
long expMillis = nowMillis + ttlMillis;
Date exp = new Date( expMillis);
builder.setExpiration( exp);
}
return builder.compact();
}

/**
* 解密 jwt
* @param jwt
* @return
* @throws Exception
*/
public Claims parseJWT(String jwt) throws Exception{
SecretKey key = generalKey();
Claims claims = Jwts. parser()
.setSigningKey( key)
.parseClaimsJws( jwt).getBody();
return claims;
}

加解密的key是通過固定字元串轉換而生成的;subject為用戶信息的json字元串;ttlMillis是指token的有效期,時間較短,需要定時更新。
這里要介紹的token刷新方式,是在生成token的同時生成一個有效期較長的refreshToken,後續由客戶端定時根據refreshToken來獲取最新的token。瀏覽器與服務端之間建立sse(server send event)請求,來實現刷新。關於sse在前面博文中有介紹過,此處略過不提。

B. java jwt token 生成很慢啊

jwt不算慢,基本是毫秒,你測試的方法估計有問題,單元測試1次jwt生成基本都是1~2秒,因為java程序剛剛啟動佔用大量資源,你循環1000次jwt生成速度對比就知道了, 基本是毫秒級別!

熱點內容
怎麼通過游戲查伺服器IP 發布:2024-02-25 12:48:40 瀏覽:991
安卓聊天記錄怎麼打碼 發布:2024-02-25 12:28:07 瀏覽:722
php取文本 發布:2024-02-25 12:27:44 瀏覽:305
壓縮卷沒發 發布:2024-02-25 12:22:59 瀏覽:714
浪客腳本 發布:2024-02-25 11:28:38 瀏覽:756
數控自動編程軟體下載 發布:2024-02-25 11:18:36 瀏覽:977
15繽智壓縮比 發布:2024-02-25 11:02:23 瀏覽:519
sqlserver默認登錄名 發布:2024-02-25 10:27:51 瀏覽:337
車載投影usb配置一般選擇哪個 發布:2024-02-25 10:07:16 瀏覽:220
u8資料庫伺服器失敗 發布:2024-02-25 10:06:39 瀏覽:891