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("中国"));
    
        }
  • 相关阅读:
    R语言 主成分分析
    主成分分析(PCA)及其在R里的实现
    UML类图几种关系的总结
    微信Android客户端架构演进之路
    Android单元测试实践
    Android studio 快捷键(Mac)
    Android 启动模式及常用的Intent的Flag
    linux常用命令 (mac ),积少成多
    Android Studio IDE 简单学习和介绍
    轻量级分布式 RPC 框架
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15166352.html
Copyright © 2011-2022 走看看