日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JWT/JJWT JSON WEB TOKEN介绍和使用

發(fā)布時(shí)間:2025/3/16 javascript 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JWT/JJWT JSON WEB TOKEN介绍和使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JSON web Token,簡(jiǎn)稱JWT,本質(zhì)是一個(gè)token,是一種緊湊的URL安全方法(注意是方法,博主剛開始接觸一直以為是一種像shiro一樣的),用于在網(wǎng)絡(luò)通信的雙方之間傳遞。一般放在HTTP的headers 參數(shù)里面的authorization里面(這個(gè)是可以自己定義放在哪里的,畢竟只是一種驗(yàn)證用戶的方式),值的前面加Bearer關(guān)鍵字和空格。除此之外,也可以在url和request body中傳遞。?
JWT包含三個(gè)部分,分別是頭部、載荷與簽名。其中頭部包含的是加密的一些信息,簽名是根據(jù)前面兩部分生成的。最主要的就是咱們存放信息的載荷部分了。?
具體介紹可以參考:http://blog.leapoahead.com/2015/09/06/understanding-jwt/?
這里就不再贅述,這篇文章主要說jjwt的使用,也就是java版本的jwt包的使用?
maven:?
當(dāng)然,項(xiàng)目中沒有maven的同學(xué)也可以去maven倉(cāng)庫(kù)里下載jjwt的jar包引入項(xiàng)目

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.7.0</version> </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

快速開始:?
構(gòu)造jwt串

import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.impl.crypto.MacProvider; import java.security.Key;// We need a signing key, so we'll create one just for this example. Usually // the key would be read from your application configuration instead.Key key = MacProvider.generateKey();//這里是加密解密的key。String compactJws = Jwts.builder()//返回的字符串便是我們的jwt串了.setSubject("Joe")//設(shè)置主題.signWith(SignatureAlgorithm.HS512, key)//設(shè)置算法(必須).compact();//這個(gè)是全部設(shè)置完成后拼成jwt串的方法
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

大概會(huì)是這樣:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJKb2UifQ.yiV1GWDrQyCeoOswYTf_xvlgsnaVVYJM0mU6rkmRBf2T1MBl3Xh2kZii0Q9BdX5-G0j25Qv2WF4lA6jPl5GKuA
  • 1

解析jwt串:

Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws).getBody().getSubject(); // 獲取jwt串里的subject參數(shù),獲取body以后可以獲取到你存入的信息
  • 1

其中parseClaimsJws驗(yàn)證jwt字符串失敗可能會(huì)拋出異常,這時(shí)咱們應(yīng)該捕獲這個(gè)異常:

try {Jws<Claims> parseClaimsJws = Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws);//compactJws為jwt字符串Claims body = parseClaimsJws.getBody();//得到body后我們可以從body中獲取我們需要的信息//比如 獲取主題,當(dāng)然,這是我們?cè)谏蒵wt字符串的時(shí)候就已經(jīng)存進(jìn)來的String subject = body.getSubject();//OK, we can trust this JWT} catch (SignatureException | MalformedJwtException e) {// TODO: handle exception// don't trust the JWT!// jwt 解析錯(cuò)誤} catch (ExpiredJwtException e) {// TODO: handle exception// jwt 已經(jīng)過期,在設(shè)置jwt的時(shí)候如果設(shè)置了過期時(shí)間,這里會(huì)自動(dòng)判斷jwt是否已經(jīng)過期,如果過期則會(huì)拋出這個(gè)異常,我們可以抓住這個(gè)異常并作相關(guān)處理。}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

ok,如果還有不明白的地方可以參考jjwt在github上的readme:https://github.com/jwtk/jjwt

總結(jié)

以上是生活随笔為你收集整理的JWT/JJWT JSON WEB TOKEN介绍和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。