当前位置: 首页 > news >正文

微服务项目:尚融宝(24)(后端搭建:JWT令牌测试)

认清现实,放弃幻想,准备斗争

一、创建Maven项目

1、项目

项目类型:Maven

groupId:com.atguigu

artifactId:jwt

2、基本依赖

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

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

</dependencies>

二、测试JWT

1、生成token

public class JwtTests {

    //过期时间,毫秒,24小时
    private static long tokenExpiration = 24*60*60*1000;
    //秘钥
    private static String tokenSignKey = "atguigu123";

    @Test
    public void testCreateToken(){
        String token = Jwts.builder()
                .setHeaderParam("typ", "JWT") //令牌类型
                .setHeaderParam("alg", "HS256") //签名算法

                .setSubject("guli-user") //令牌主题
                .setIssuer("atguigu")//签发者
                .setAudience("atguigu")//接收者
                .setIssuedAt(new Date())//签发时间
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) //过期时间
                .setNotBefore(new Date(System.currentTimeMillis() + 20*1000)) //20秒后可用
                .setId(UUID.randomUUID().toString())

                .claim("nickname", "Helen")
                .claim("avatar", "1.jpg")

                .signWith(SignatureAlgorithm.HS256, tokenSignKey)//签名哈希
                .compact(); //转换成字符串

        System.out.println(token);
    }
}

 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWxpLXVzZXIiLCJpc3MiOiJhdGd1aWd1IiwiYXVkIjoiYXRndWlndSIsImlhdCI6MTY2MjYzNTc0NiwiZXhwIjoxNjYyNzIyMTQ2LCJuYmYiOjE2NjI2MzU3NjYsImp0aSI6ImQ0OGE2MTY3LWNiNzMtNGQyMi1hMjg2LTJjNDU2YWYyOTY5MiIsIm5pY2tuYW1lIjoiSGVsZW4iLCJhdmF0YXIiOiIxLmpwZyJ9.KR9MIgf0Hykpa78GyxcEAcZHe8R_onDGpr7c3Ns3Mg8

 2、解析token

  @Test
    public void testGetUserInfo(){
        String token = Jwts.builder()
                .setHeaderParam("typ", "JWT") //令牌类型
                .setHeaderParam("alg", "HS256") //签名算法

                .setSubject("guli-user") //令牌主题
                .setIssuer("atguigu")//签发者
                .setAudience("atguigu")//接收者
                .setIssuedAt(new Date())//签发时间
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) //过期时间
                .setNotBefore(new Date(System.currentTimeMillis())) //20秒后可用
                .setId(UUID.randomUUID().toString())

                .claim("nickname", "Helen")
                .claim("avatar", "1.jpg")

                .signWith(SignatureAlgorithm.HS256, tockenSigKey)//签名哈希
                .compact(); //转换成字符串

        System.out.println(token);
        JwtParser parser = Jwts.parser();
        Jws<Claims> claimsJws = parser.setSigningKey(tockenSigKey).parseClaimsJws(token);
        Claims body = claimsJws.getBody();
        String subject = body.getSubject();
        Date issuedAt = body.getIssuedAt();
        Date notBefore = body.getNotBefore();
        String signature = claimsJws.getSignature();
        System.out.println(subject);
        System.out.println(notBefore);
        System.out.println(issuedAt);
        System.out.println(signature);
    }

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWxpLXVzZXIiLCJpc3MiOiJhdGd1aWd1IiwiYXVkIjoiYXRndWlndSIsImlhdCI6MTY2MjYzNTg4NywiZXhwIjoxNjYyNzIyMjg3LCJuYmYiOjE2NjI2MzU4ODcsImp0aSI6IjA0ZTBiZDk3LTFkOWItNGY5MS04M2RkLWEyMGI1OWI4Yjk1NiIsIm5pY2tuYW1lIjoiSGVsZW4iLCJhdmF0YXIiOiIxLmpwZyJ9.LPFZG5d5Y2YQuFjEKJQdrjrl_i9m5YsXECyK2qd232w
guli-user
Thu Sep 08 19:18:07 CST 2022
Thu Sep 08 19:18:07 CST 2022
LPFZG5d5Y2YQuFjEKJQdrjrl_i9m5YsXECyK2qd232w 

相关文章:

  • 第6章 MyBatis框架入门详解(2)
  • 【图像识别-指纹识别】指纹特征提取附matlab代码
  • 3道Java基础题
  • Docker 安装 MySQL、Redis、Nginx
  • 疫情宅在家,研究一下fastjson中字段智能匹配的原理
  • 【MapGIS精品教程】001:MapGIS K9完整图文安装教程
  • 指针和数组笔试题解析
  • 人脸检测5种方法
  • SparkSQL 总结(未完待续)
  • 51单片机入门——数模\模数转换
  • 【毕业设计】 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32
  • 花边新闻获取易语言代码
  • HTML5入门(1)——HTML基础
  • 计算机网络体概念
  • redis底层都有哪些数据结构?带你了解redis是如何存储数据的
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 4个实用的微服务测试策略
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • JAVA SE 6 GC调优笔记
  • JavaScript创建对象的四种方式
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Mysql数据库的条件查询语句
  • Phpstorm怎样批量删除空行?
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React-Native - 收藏集 - 掘金
  • RxJS: 简单入门
  • STAR法则
  • ubuntu 下nginx安装 并支持https协议
  • web标准化(下)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 我感觉这是史上最牛的防sql注入方法类
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (第一天)包装对象、作用域、创建对象
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)u-boot-nand.bin的下载
  • (转)四层和七层负载均衡的区别
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net 代码性能 - (1)
  • .net 后台导出excel ,word
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @RestController注解的使用
  • [ NOI 2001 ] 食物链
  • [20180224]expdp query 写法问题.txt
  • [AAuto]给百宝箱增加娱乐功能
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [ES-5.6.12] x-pack ssl
  • [IE编程] IE中对网页进行截图的编程接口