首先我们要知道什么是jwt?
JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的,
用处:
比如我们可以将它用来授权,我们登陆用户后,我们将我们的用户名密码都存入jwt中,我们得到该jwt,后续我们需要时,可以传入jwt,当我们需要该数据时,我们可以解析该jwt,将我们需要的数据全部解析出来,而且jwt的数据量很小,传输速度十分的快。
JWT的结构
1、标头(Header)
2、有效载荷(payload)
3、签名(Signature)
通常展示为xxxxx.yyyyy.zzzzz Header.Payload.Signature
先引入jwt的依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
我们先创建一个测试类
@Test
void contextLoads() {
//令牌的生成,获取
HashMap<String,Object> map =new HashMap<>();
Calendar instance =Calendar.getInstance();
instance.add(Calendar.SECOND,500);//从现在开始五十秒
String token =JWT.create()
.withHeader(map) //header
.withClaim("userId",21) //payload
.withClaim("username","小陈")
.withExpiresAt(instance.getTime()) //指定令牌的过期时间;
.sign(Algorithm.HMAC256("!Q@W#E$R")); //签名,引号里面随便写的
System.out.println("令牌生成成功:"+ token);
}
我们解析我们的jwt
@Test
void test(){
//创建验证对象
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("!Q@W#E$R")).build();//签名方式要一致
DecodedJWT verify = jwtVerifier.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTk5OTEzNjAsInVzZXJJZCI6MjEsInVzZXJuYW1lIjoi5bCP6ZmIIn0.o91OkDwiXyr3KuOiW70Yx85rjeeVuj1sxzUsg2pMba8");//DecodedJWT 解码后的jwt
System.out.println(verify.getClaim("username").asString());
System.out.println(verify.getExpiresAt());
}
这就是简单的一个jwt的使用