JWT简单使用

创建一个Maven项目,并导入jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qbb</groupId>
    <artifactId>jwt</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- JWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>

测试案例

使用jwt获取token

public class  JwtUtils {

    // 过期时间
    public static final long EXPIRE = 30 * 1000;
    // APP_SECRET
    public static final String APP_SECRET = "QIUQIU&LL";

    /**
     * 获取token
     * @param id
     * @param nickName
     * @param avatar
     * @return
     */
    public static String genJwt(String id, String nickName, String avatar) {
        // 创建Jwt对象
        JwtBuilder builder = Jwts.builder();

        // 第一部分 JWT头部 header
        builder.setHeaderParam("alg", "HS256"); // 签名算法,默认值
        builder.setHeaderParam("typ", "JWT");  // 令牌类型,默认值

        // 第二部分 有效载荷 playload
        // 默认字段
        builder.setId("1"); // jwt唯一身份标识
        builder.setSubject("qbb-user"); // 令牌的主题
        builder.setIssuedAt(new Date()); // 签发时间
        builder.setExpiration(new Date(System.currentTimeMillis() + EXPIRE));// 设置过期时间

        // 私有字段
        builder.claim("id", id);
        builder.claim("nickName", nickName);
        builder.claim("avatar", avatar);

        // 第三部分 签名Hash
        builder.signWith(SignatureAlgorithm.HS256, APP_SECRET);

        // 将三部分连接起来
        String token = builder.compact();

        return token;
    }
}



 @Test
    public void testGenJwt() {
        Member member = new Member();
        member.setId("100");
        member.setNickName("qbb");
        member.setAvatar("hello.jpg");
        String token = JwtUtils.genJwt(member.getId(), member.getNickName(), member.getAvatar());
        System.out.println(token);
    }
result:   eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoicWJiLXVzZXIiLCJpYXQiOjE2NDYyMzEwMjcsImV4cCI6MTY0NjIzMTA1NywiaWQiOiIxMDAiLCJuaWNrTmFtZSI6InFiYiIsImF2YXRhciI6ImhlbGxvLmpwZyJ9.x5Rxka-J-HPOL_fM1zIxAl9y45UzQJWu_xI-s5Bzfuc

解析jwtToken

/**
     * 解析jwtToken
     * @param jwtToekn
     * @return
     */
    public static Claims checkJwt(String jwtToekn) {
        // 获取解析器
        JwtParser parser = Jwts.parser();
        Jws<Claims> claimsJws = parser.setSigningKey(APP_SECRET).parseClaimsJws(jwtToekn);
        JwsHeader header = claimsJws.getHeader();
        Claims body = claimsJws.getBody();
        String signature = claimsJws.getSignature();
        System.out.println("header:" + header);
        System.out.println("body:" + body);
        System.out.println("signature:" + signature);

        return body;
    }
 @Test
    public void testCheckJwt() {
        Claims claims = JwtUtils.checkJwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoicWJiLXVzZXIiLCJpYXQiOjE2NDYyMzEwMjcsImV4cCI6MTY0NjIzMTA1NywiaWQiOiIxMDAiLCJuaWNrTmFtZSI6InFiYiIsImF2YXRhciI6ImhlbGxvLmpwZyJ9.x5Rxka-J-HPOL_fM1zIxAl9y45UzQJWu_xI-s5Bzfuc");
        String id = (String) claims.get("id");
        String nickName = (String) claims.get("nickName");
        String avatar = (String) claims.get("avatar");
        System.out.println(id);
        System.out.println(nickName);
        System.out.println(avatar);
    }

注意:测试的时候记得把测试时间设置长一点,不然会报错哦~ io.jsonwebtoken.ExpiredJwtException

posted @   我也有梦想呀  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示