JSON Web Token (JWT)生成Token及解密实战。

从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下。
https://github.com/jwtk/jjwt
下面来看看如何使用jjwt来实现JWT token的生成与解密,主要用到sha512算法来演示。
1、导入jjwt的maven包。
  1. <dependency>
  2.    <groupId>io.jsonwebtoken</groupId>
  3.    <artifactId>jjwt</artifactId>
  4.    <version>0.9.0</version>
  5. </dependency>
注意:JJWT依赖Jackson 2.x,低版本将报错。
2、建立一个JWTTest测试类。
3、创建密钥;
这里使用sha512算法,所以需要一个密钥。
  1. Key KEY =newSecretKeySpec("javastack".getBytes(),
  2.            SignatureAlgorithm.HS512.getJcaName());
这样就生成了一个固定的密钥:javastack
4、生成JWT token。
核心代码如下:
  1. Map<String,Object> stringObjectMap =newHashMap<>();
  2. stringObjectMap.put("type","1");
  3. String payload ="{"user_id":"1341137", "expire_time":"2018-01-01 0:00:00"}";
  4. String compactJws =Jwts.builder().setHeader(stringObjectMap)
  5. .setPayload(payload).signWith(SignatureAlgorithm.HS512, KEY).compact();
  6. System.out.println("jwt key:"+newString(KEY.getEncoded()));
  7. System.out.println("jwt payload:"+ payload);
  8. System.out.println("jwt encoded:"+ compactJws);
注意:header可以不用设置,claims不能和payload同时设置。
输出结果:
  1. jwt key:javastack
  2. jwt payload:{"user_id":"1341137","expire_time":"2018-01-01 0:00:00"}
  3. jwt encoded:eyJ0eXBlIjoiMSIsImFsZyI6IkhTNTEyIn0.eyJ1c2VyX2lkIjoiMTM0MTEzNyIsICJleHBpcmVfdGltZSI6IjIwMTgtMDEtMDEgMDowMDowMCJ9.cnyXRnwczgNcNYqV6TUY2MaMfk6vujsZltC8Q51l40dwYJg516oZcV4VDKOypPT8fD7AE63PIhfdm2ALVrfv5A
5、解密JWT token内容。
核心代码如下:
  1. Jws<Claims> claimsJws =Jwts.parser().setSigningKey(KEY).parseClaimsJws(compactJws);
  2. JwsHeader header = claimsJws.getHeader();
  3. Claims body = claimsJws.getBody();
  4. System.out.println("jwt header:"+ header);
  5. System.out.println("jwt body:"+ body);
  6. System.out.println("jwt body user-id:"+ body.get("user_id",String.class));
输出结果:
  1. jwt header:{type=1, alg=HS512}
  2. jwt body:{user_id=1341137, expire_time=2018-01-010:00:00}
  3. jwt body user-id:1341137
再用密文去JWT官网的调试器解密一下,看是否成功。
解密成功,其他算法使用逻辑一样,这样我们可以使用JWT来实现不同服务之间数据的安全传递。
本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » JSON Web Token (JWT)生成Token及解密实战。

Leave a Reply