全称:JSON Web Token
定义了一种简洁的,自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。
组成:
第一部分:Header(头),记录令牌类型,签名算法。
第二部分:Payload(有效载荷),携带一些自定义信息,默认信息。
第三部分:Signature(签名),防止Token被篡改,根据签名算法算出,不会被解析出来。
场景:登录认证
- 登录成功后,生成令牌
- 后续每个请求,都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后在处理
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
/* 生成Jwt */ @Test public void testGenJwt(){ Map<String, Object> claims=new HashMap<>(); claims.put("id",1); claims.put("name","tom"); String jwt = Jwts.builder() .signWith(SignatureAlgorithm.HS256, "itheima")//签名算法+签名密钥 .setClaims(claims)//自定义内容(载荷) .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))//设置有效期 .compact();//生成令牌 System.out.println(jwt); }
/* 解析Jwt */ @Test public void testParseJwt(){ Claims claims = Jwts.parser() .setSigningKey("itheima")//签名密钥 .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9." + "eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTcwNTEzNDAxOX0." + "VLIhWollj6-czVsj7xHvKicxtwkPF6FbVJoh7AX6A78") .getBody();//拿到自定义的内容 System.out.println(claims); }