javascript
JSON Web Token (JWT)生成Token及解密实战
轉(zhuǎn)載自?JSON Web Token (JWT)生成Token及解密實戰(zhàn)
昨天講解了JWT的介紹、應(yīng)用場景、優(yōu)點及注意事項等,今天來個JWT具體的使用實踐吧。
從JWT官網(wǎng)支持的類庫來看,jjwt是Java支持的算法中最全的,推薦使用,網(wǎng)址如下。
https://github.com/jwtk/jjwt
下面來看看如何使用jjwt來實現(xiàn)JWT token的生成與解密,主要用到sha512算法來演示。
1、導(dǎo)入jjwt的maven包。
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</version> </dependency>注意:JJWT依賴Jackson 2.x,低版本將報錯。
2、建立一個JWTTest測試類。
3、創(chuàng)建密鑰;
這里使用sha512算法,所以需要一個密鑰。
Key KEY = new SecretKeySpec("javastack".getBytes(),SignatureAlgorithm.HS512.getJcaName());這樣就生成了一個固定的密鑰:javastack
4、生成JWT token。
核心代碼如下:
Map<String, Object> stringObjectMap = new HashMap<>(); stringObjectMap.put("type", "1"); String payload = "{\"user_id\":\"1341137\", \"expire_time\":\"2018-01-01 0:00:00\"}"; String compactJws = Jwts.builder().setHeader(stringObjectMap) .setPayload(payload).signWith(SignatureAlgorithm.HS512, KEY).compact(); System.out.println("jwt key:" + new String(KEY.getEncoded())); System.out.println("jwt payload:" + payload); System.out.println("jwt encoded:" + compactJws);注意:header可以不用設(shè)置,claims不能和payload同時設(shè)置。
輸出結(jié)果:
jwt key:javastack jwt payload:{"user_id":"1341137", "expire_time":"2018-01-01 0:00:00"} jwt encoded:eyJ0eXBlIjoiMSIsImFsZyI6IkhTNTEyIn0.eyJ1c2VyX2lkIjoiMTM0MTEzNyIsICJleHBpcmVfdGltZSI6IjIwMTgtMDEtMDEgMDowMDowMCJ9.cnyXRnwczgNcNYqV6TUY2MaMfk6vujsZltC8Q51l40dwYJg516oZcV4VDKOypPT8fD7AE63PIhfdm2ALVrfv5A5、解密JWT token內(nèi)容。
核心代碼如下:
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(KEY).parseClaimsJws(compactJws); JwsHeader header = claimsJws.getHeader(); Claims body = claimsJws.getBody(); System.out.println("jwt header:" + header); System.out.println("jwt body:" + body); System.out.println("jwt body user-id:" + body.get("user_id", String.class));輸出結(jié)果:
jwt header:{type=1, alg=HS512} jwt body:{user_id=1341137, expire_time=2018-01-01 0:00:00} jwt body user-id:1341137再用密文去JWT官網(wǎng)的調(diào)試器解密一下,看是否成功。
解密成功,其他算法使用邏輯一樣,這樣我們可以使用JWT來實現(xiàn)不同服務(wù)之間數(shù)據(jù)的安全傳遞。
總結(jié)
以上是生活随笔為你收集整理的JSON Web Token (JWT)生成Token及解密实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是除数和被除数 除数和被除数怎么区分
- 下一篇: 通用唯一标识码UUID的介绍及使用