一、使用maven引入jjwt包

<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.6.0</version></dependency>二、生成token的方式

新建一个生成token的类

package com.example.demo.controller;import io.jsonwebtoken.JwtBuilder;import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import java.util.Date;public class CreateJwt { public static void main(String[] args) { //Jwts.builder()生成 //Jwts.parser()验证 JwtBuilder jwtBuilder = Jwts.builder() .setId("123") .setSubject("梦阳") //用户名 .setIssuedAt(new Date())//登录时间 .signWith(SignatureAlgorithm.HS256, "my-123").setExpiration(new Date(new Date().getTime()+60000))//设置过期时间 .claim("role","admin"); //自定义属性 //前三个为载荷playload 最后一个为头部 header System.out.println(jwtBuilder.compact()); }}

运行结果为:

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjMyODU2MTB9.iKtLy0T5ZzvzS2sjgcs5WyuM7cofmnzxzml7wicrTnA

三、新建一个类来解码刚刚生成的token

package com.example.demo.controller;import io.jsonwebtoken.Claims;import io.jsonwebtoken.Jwts;import java.text.SimpleDateFormat;//token的解析//有状态登录 服务器端保存用户信息//无状态登录 服务器端没有保存用户信息 无状态效率比有状态效率高public class PraseJwtTest { public static void main(String[] args) { Claims claims = Jwts.parser() .setSigningKey("my-123") //.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjMyODU2MTB9.iKtLy0T5ZzvzS2sjgcs5WyuM7cofmnzxzml7wicrTnA") .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMjMiLCJzdWIiOiLmoqbpmLMiLCJpYXQiOjE1ODIwMDM5MzIsImV4cCI6MTU4MjAwMzk5Miwicm9sZSI6ImFkbWluIn0.vN0pcBVNIixcqp6MsSmGWWVyCc4uOkTpcd8MUDHcn4A") .getBody(); System.out.println("用户id:"+claims.getId()); System.out.println("用户名:"+claims.getSubject()); System.out.println("用户时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));System.out.println("过期时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration())); System.out.println("用户角色:"+claims.get("role")); }}

运行结果为:
用户id:123
用户名:梦阳
用户时间:2020-02-18 13:32:12
过期时间:2020-02-18 13:33:12
用户角色:admin