1、基本认识
jwt : JSON Web Token, json形式的web令牌 。常用于前后端分离项目的安全验证。
jwt应用场景:
1、一次性验证:比如邮箱注册,返回给你的连接可能就是jwt
2、restful api 的无状态认证,可以代替session
jwt的token由三部分构成,将这三段信息文本用.链接一起就构成了Jwt字符串。
如下例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
这三部分分别叫做:header、playload、signature
- header : 声明类型、加密算法
- playload :存放有效信息,如签发者、用户、签发时间等
- signature : 由前两部分组合然后加盐加密构成
2、生成token、解析
1、依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
2、生成token
Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND,200); // 200秒
String token = JWT.create()
.withClaim("userid", 12) // payload
.withClaim("username", "zhang")
.withExpiresAt(instance.getTime()) // 设置过期时间,200秒
.sign(Algorithm.HMAC256("123ABCD!")); // 密钥
System.out.println(token);
如上代码输出内容
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTE2Mjc0ODksInVzZXJpZCI6MTIsInVzZXJuYW1lIjoiemhhbmcifQ.JeEaSypQrT0Dxtix4ljS1LSvjdYoF8Q0zZ9_y3yajBA
3、根据令牌和签名解析数据
// 创建验证对象
JWTVerifier jwt_v = JWT.require(Algorithm.HMAC256("123ABCD!")).build();
// 根据密钥获取 存有token数据的对象
DecodedJWT verify = jwt_v.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTE2Mjc0ODksInVzZXJpZCI6MTIsInVzZXJuYW1lIjoiemhhbmcifQ.JeEaSypQrT0Dxtix4ljS1LSvjdYoF8Q0zZ9_y3yajBA");
// 打印数据
System.out.println(verify.getClaim("userid").asInt());
System.out.println(verify.getClaim("username").asString());
// 打印过期时间
System.out.println(verify.getExpiresAt());
执行 根据令牌和签名解析数据 时如果出现以下内容表示令牌过期了

下面是各种异常对应的解释

3、与spring boot整合使用
3.1、准备使用场景(创建项目)
创建一个springboot项目
下面是要用到的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.19</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
配置文件 application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jwt?characterEncoding=UTF-8
spring.datasource.password=root
spring.datasource.username=root
mybatis.type-aliases-package=com.beaninj.entity
mybatis.mapper-locations=classpath:com/beaninj/mapper/*.xml
logging.level.com.beaninj.dao=debug
新建数据库jwt、表user
CREATE DATABASE jwt
use jwt
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int NOT NULL,
`name` varchar(255) DEFAULT NULL,
`pwd` varchar(255) DEFAULT NULL,
PRIMARY KEY (`

本文介绍JWT(JSON Web Token)的基本概念,演示如何使用Java生成和解析JWT,并展示JWT与Spring Boot项目的整合应用,包括创建项目、引入JWT依赖、利用拦截器进行JWT验证。
最低0.47元/天 解锁文章
8051

被折叠的 条评论
为什么被折叠?



