JSON Web Token的简称
用户登录之后,在服务端生成jwt,然后服务端将jwt发送给用户端,然后客户端将jwt存到cookie里面,以后客户端每次向服务端通信都会携带jwt,服务端收到这个jwt就能解析用户的身份

jwt分成三部分:头部header 数据playload 签名signature,中间用.进行拼接,组成一个字符串
(1)header是一个json对象使用Base64URL转成的字符串:原始json 包含两个信息,第一个属性type指定token的类型,这里是JWT,最重要的是第二个属性alg,指定第三部分签名signature所使用的算法,默认是HSA256,然后将这个Json对象使用Base64URL转成字符串

(2)playload也是一个Json对象,用来存放实际需要传递的数据,这个Json对象也会使用Base64URL转成字符串

(3)signature:使用header里面的加密算法,对header,playload,服务端的密钥(可能是一个字符串,比如说“secret”)使用header中规定的HSA256算法进行加密,得到字符串signature

这里secret就是服务端的密匙
最后JWT由以上三部分组成,部分与部分之间用点作为分隔 :

总结jwt的生成流程:

jwt在项目中怎么使用:
step1加入jwt依赖
- <dependency>
- <groupId>com.auth0groupId>
- <artifactId>java-jwtartifactId>
- <version>4.1.0version>
- dependency>
step2:加密和解密
- String signature="admin";
- public void jwt()
- {
- //算出一天有多少毫秒,注意是为了后面设置jwt有效时间做准备
- long time=1000*60*60*24;
-
-
-
- //创建一个Jwt对象
- JwtBuilder jwtBuilder=Jwts.builder();
-
- //设置一个JWT的三部分:Header,Payload,Signature
- String jwtToken=jwtBuilder.setHeaderParam("Type","JWT")
- .setHeaderParam("alg","HS256")
-
- //上面是设置Header,下面设置payload载荷
- .claim("username","tom")//添加payload载荷
- .claim("role","tom")
- .setSubject("admin-test")//设置子主题,这个可以自己加
- .setExpiration(System.currentTimeMillis()+time)//设置有效时间,当前时间+24小时
- .setId(UUID.randomUUID().toString())
-
- //接下来设置Signature
- .signWith(SignatureAlgorithm.HS256,signature)
- .compact();//将三部分用点进行拼接
- System.out.println(jwtToken);//可以打印出jwt:XXXXX.XXXXX.XXXXX
- }
-
- //对上面生成的jwt进行解密
- public void Decoder()
- {
- String token="XXXXX.XXXXX.XXXXX";
- JWTParser jwtParser=Jwts.parser();
-
- jwtParser.setSigningKey(signature).parseClaimsJws(token);
-
- Claims claims=claimsJws.getBody();
-
-
- //接下来就可以拿到jwt里面Payload负载信息了
- claims.get("username");
-
- claims.get("role");
-
- claims.getId();
-
- claims.getSubject();
- }