JSON Web Token (JWT)生成Token及解密实战。
2018-01-25 09:37
801 查看
昨天讲解了JWT的介绍、应用场景、优点及注意事项等,今天来个JWT具体的使用实践吧。
从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下。
https://github.com/jwtk/jjwt
下面来看看如何使用jjwt来实现JWT token的生成与解密,主要用到sha512算法来演示。
1、导入jjwt的maven包。
注意:JJWT依赖Jackson 2.x,低版本将报错。
2、建立一个JWTTest测试类。
3、创建密钥;
这里使用sha512算法,所以需要一个密钥。
这样就生成了一个固定的密钥:javastack
4、生成JWT token。
核心代码如下:
注意:header可以不用设置,claims不能和payload同时设置。
输出结果:
5、解密JWT token内容。
核心代码如下:
输出结果:
再用密文去JWT官网的调试器解密一下,看是否成功。
解密成功,其他算法使用逻辑一样,这样我们可以使用JWT来实现不同服务之间数据的安全传递。
面经:史上最全Java多线程面试题及答案
面经:史上最全阿里高级Java面试题
面经:史上最全Spring面试题
教程:最全Spring Boot全套视频教程
书籍:进阶Java架构师必看的15本书
工具:推荐一款在线创作流程图、思维导图软件
分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下。
https://github.com/jwtk/jjwt
下面来看看如何使用jjwt来实现JWT token的生成与解密,主要用到sha512算法来演示。
1、导入jjwt的maven包。
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency>
注意:JJWT依赖Jackson 2.x,低版本将报错。
2、建立一个JWTTest测试类。
3、创建密钥;
这里使用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可以不用设置,claims不能和payload同时设置。
输出结果:
jwt key:javastack jwt payload:{"user_id":"1341137", "expire_time":"2018-01-01 0:00:00"} jwt encoded:eyJ0eXBlIjoiMSIsImFsZyI6IkhTNTEyIn0.eyJ1c2VyX2lkIjoiMTM0MTEzNyIsICJleHBpcmVfdGltZSI6IjIwMTgtMDEtMDEgMDowMDowMCJ9.cnyXRnwczgNcNYqV6TUY2MaMfk6vujsZltC8Q51l40dwYJg516oZcV4VDKOypPT8fD7AE63PIhfdm2ALVrfv5A
5、解密JWT token内容。
核心代码如下:
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));
输出结果:
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官网的调试器解密一下,看是否成功。
解密成功,其他算法使用逻辑一样,这样我们可以使用JWT来实现不同服务之间数据的安全传递。
推荐阅读
干货:2TB架构师四阶段视频教程面经:史上最全Java多线程面试题及答案
面经:史上最全阿里高级Java面试题
面经:史上最全Spring面试题
教程:最全Spring Boot全套视频教程
书籍:进阶Java架构师必看的15本书
工具:推荐一款在线创作流程图、思维导图软件
分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
相关文章推荐
- Go实战--golang中使用JWT(JSON Web Token)
- JWT生成JsonWebToken登录令牌并使用自定义过滤器验证(包含跨域设置)
- Go实战--golang中使用JWT(JSON Web Token)
- Spring Boot实战之Filter实现使用JWT进行接口认证 jwt(json web token) 用户发送按照约定,向服务端发送 Header、Payload 和 Signature,
- JSON Web Token - 在Web应用间安全地传递信息 JWT
- JWT(JSON WEB TOKEN)是什么
- JWT (JSON Web Token)在 Web 应用间安全的传递信息
- JWT(Json web token)
- Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证
- JWT/JJWT JSON WEB TOKEN介绍和使用
- JSON Web Token (JWT),服务端信息传输安全解决方案。
- JWT【JSON Web Token】 简述
- spring安全验证之jwt(json web token)实践
- node使用JsonWebToken 生成token,完成用户登录、登录检测
- JWT(JSON WEB TOKEN)概要
- gitlab无法push或clone的错误:JWT::DecodeError (Nil JSON web token): lib/gitlab/workhorse.rb:120:in `verify_api_request!'
- 什么是 JWT -- JSON WEB TOKEN
- JWT【JSON Web Token】 简述
- JWT -- JSON WEB TOKEN
- python使用json web token (jwt)实现http api的加密传输