[Java2023] Day12.7-JTW令牌的生成和校验

106 阅读1分钟

image.png

  • 单元测试代码如下
package com.tlias;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

// 如果用不到Springboot的东西, 可以暂时注释掉, 编译速度会更快
//@SpringBootTest
class TliasApplicationTests {


    @Test
    void contextLoads() {
    }

    // 1.生成jwt令牌
    @Test
    public void testJWT() {

        // claims, 英文是申明. 宣称的意思
        Map<String, Object> claims = new HashMap<>();
        claims.put("id", 1);
        claims.put("name", "tome");

        String jwt = Jwts.builder()
            .signWith(SignatureAlgorithm.HS256, "itheima") // 1.签名算法
            .setClaims(claims)  // 2.自定义内容
            .setExpiration(new Date(System.currentTimeMillis()+ 3600 * 1000))  // 3.设置有效时间为1h
            .compact();

        System.out.println(jwt);
    }


    // 2.解析jwt令牌
    @Test
    public void testParseJwt() {
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tZSIsImlkIjoxLCJleHAiOjE2OTUwMDQ3NDV9.GveXfqiHGyn74JrygTGdg7rYu16fDlShGhhdQiYnQRY";
        Claims claims = Jwts.parser()
                .setSigningKey("itheima")
                .parseClaimsJws(token)
                .getBody();
        System.out.println(claims);
    }
}