javascript
JWT/JJWT JSON WEB TOKEN介绍和使用
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)目
- 1
- 2
- 3
- 4
- 5
快速開始:?
構(gòu)造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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这题不错
- 下一篇: Spring Boot开发之流水无情(二