JWT —— token令牌

发布时间 2023-05-25 10:29:52作者: Rover20230226

JWT

一、介绍

  全称:JSON Web Token ,用于对应用程序上的用户进行身份标记

  本质上就是一个经过加密处理与校验处理的字符串,它由三部分组成:

    头信息(Header):记录令牌类型和签名算法,例如:{ "alg" : "HS256", "typ" : "JWT" }

    有效载荷(Payload):记录一些自定义能够区分身份的非敏感信息,例如:{ "id" : "1", "username" : "tom" }

    签名(Signature):用于保证 Token 在传输过程中不被篡改,它是 header、payload,加入指定算法计算得来的。

二、使用流程

三、代码实现

1 <!--Token生成与解析-->
2 <dependency>
3     <groupId>io.jsonwebtoken</groupId>
4     <artifactId>jjwt</artifactId>
5     <version>0.9.1</version>
6 </dependency>
Token生成与解析
 1 package com.itheima.test;
 2 
 3 import io.jsonwebtoken.Claims;
 4 import io.jsonwebtoken.Jwts;
 5 import io.jsonwebtoken.SignatureAlgorithm;
 6 import org.junit.jupiter.api.Test;
 7 
 8 import java.util.Date;
 9 import java.util.HashMap;
10 import java.util.Map;
11 
12 public class JwtTest {
13 
14     //生成token
15     @Test
16     public void genJwt() {
17         Map<String, Object> claims = new HashMap<>();
18         claims.put("id", 1);
19         claims.put("username", "Tom");
20 
21         String jwt = Jwts.builder().
22                 setClaims(claims) //自定义内容(载荷)
23                 .signWith(SignatureAlgorithm.HS256, "itheima") //签名算法和盐
24                 .setExpiration(new Date(System.currentTimeMillis() + 12 * 3600 * 1000)) //有效期
25                 .compact();
26         System.out.println(jwt);
27     }
28 
29     //校验token
30     @Test
31     public void checkJwt() {
32         Claims claims = Jwts.parser()
33                 .setSigningKey("itheima")//
34                 .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjc3MzU3MjE0LCJ1c2VybmFtZSI6IlRvbSJ9.RBtRZGHUefLElDWWIlQRoy0_Dl71sZysPP61vVa46oo")//上一步得到的值
35                 .getBody();
36         System.out.println(claims);
37     }
38 }
生成并校验token

 

Token

一、作用

  1、token可以对用户身份信息进行加密,返回给客户端自己保存

  2、客户端可以携带 token 访问业务相关的其他系统,而不用重新登录

二、注意事项

  保证加密使用的是同一个密钥

三、示意图