JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。

JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSON Web令牌(JWTs)的库。

JJWT是基于JWT、JWS、JWE、JWK和JWA RFC规范的Java实现。

JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。

JJWT用法

添加依赖

        <!--jjwt 生成token-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
/**
     * 生成Token
     */
    @Test
    public void testJWTBuilder(){
        long now = System.currentTimeMillis();
        long exp = now + 60 * 1000;
        JwtBuilder jwtBuilder= Jwts.builder()
                //设置id,{"jti":""}
                .setId("9527")
                //{"sub":""}
                .setSubject("JJWT")
                //{"iat":""}
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256,"xxxxx")
                //过期时间,指定从现在开始到什么时候过期,{"exp":""}
                .setExpiration(new Date(exp))
                //自定义声明,参数map
                //.addClaims()
                .claim("name","xiaoqiang")
                .claim("中国","加油");

        //生成token
        String token = jwtBuilder.compact();
        System.out.println(token);

        String[] split=token.split("\.");

        System.out.println(Base64Codec.BASE64.decodeToString(split[0]));
        System.out.println(Base64Codec.BASE64.decodeToString(split[1]));
        System.out.println(Base64Codec.BASE64.decodeToString(split[2]));
    }

    /**
     * Token解析
     */
    @Test
    public void testJWTToken(){
        String token = "eyJhbGciOiJIUzI1NiJ9." +
                "eyJqdGkiOiI5NTI3Iiwic3ViIjoiSkpXVCIsImlhdCI6MTYyOTQ0MTE2OSwiZXhwIjoxNjI5NDQxMjI5LCJuYW1lIjoieGlhb3FpYW5nIiwi5Lit5Zu9Ijoi5Yqg5rK5In0" +
                ".ztKcVF5r5hwQ7X4qwhH-NvWmdWELXImxIDRWiaCSzq8";

        Claims claims = Jwts.parser().setSigningKey("xxxxx")
                .parseClaimsJws(token).getBody();

        System.out.println("jti:"+claims.getId());
        System.out.println("sub:"+claims.getSubject());
        System.out.println("iat:"+claims.getIssuedAt());
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("iat:"+format.format(claims.getIssuedAt()));
        System.out.println("exp:"+format.format(claims.getExpiration()));
        System.out.println("name:"+claims.get("name"));
        System.out.println("中国:"+claims.get("中国"));

    }