• JJWT


    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("中国"));
    
        }
  • 相关阅读:
    在线工具TOOL收藏
    HtmlDocument [代码碎片笔记]
    ChromiumWebBrowser [链接]
    PHP [开发汇总]
    Discuz[技术文献]
    [jvm] -- 监控和调优常用命令工具篇
    [jvm] -- 常用内存参数配置篇
    [日常摘要] -- 事务的隔离级别篇
    [日常摘要] -- ThreadLocal篇
    [日常摘要] -- zookeeper篇
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15166352.html
Copyright © 2020-2023  润新知