zoukankan      html  css  js  c++  java
  • 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("中国"));
    
        }
  • 相关阅读:
    fread 和 read的区别
    Windows下的linux开发环境Cygwin的安装配置
    开机出现grub提示符后怎样进入系统?
    Matlab中函数句柄的优点
    UNIX环境高级编程的apue.h源码APUE
    装了一个ubuntu10.10,打印机不能添加了,
    迅雷上如何下载热映的电影大片~~
    我的linux 初始配置安装的东东,最好保存上一份,对于经常装linux的朋友
    HDU 1875 畅通工程再续
    HDU 1874 畅通工程续
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15166352.html
Copyright © 2011-2022 走看看