當前位置:首頁 » 編程語言 » 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生成速度對比就知道了, 基本是毫秒級別!

熱點內容
ios應用上傳 發布:2024-09-08 09:39:41 瀏覽:439
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:871
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:780
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995