JWT生成、解析token

news2024/9/23 9:34:36

目录

  • 1. 导入JWT相关依赖
  • 2. JWT生成token
  • 3. JWT解析token
  • 4. 测试结果
  • 5. JWT加密、解密工具类

1. 导入JWT相关依赖

<!--      jwt认证模块-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-api</artifactId>
        <version>0.10.2</version>
      </dependency>
<!--      jwt api impl实现-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-impl</artifactId>
        <version>0.10.2</version>
      </dependency>
<!--      jwt json-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-jackson</artifactId>
        <version>0.10.2</version>
      </dependency>

2. JWT生成token

在这里插入图片描述

    /**
    * 获取JWT令牌
    * @return
    */
    public static String getToken(String key){
        Map headers = new HashMap();
        //设置签名算法
        headers.put("alg", "HS256");
        //设置令牌类型
        headers.put("typ", "JWT");

        Map<String, Object> claims = new HashMap<>();
        //设置令牌主题
        claims.put("sub", "1234567890");
        //设置令牌其他信息
        claims.put("name", "John Doe");
        claims.put("admin", true);

        //生成令牌
        String jwt = Jwts.builder()
        //设置头信息
        .setHeaderParams(headers)
        //设置负载信息
        .setClaims(claims)
        //使用HS256算法和密钥对JWT进行签名
        .signWith(SignatureAlgorithm.HS256,key)
        //将之前设置的头部信息、负载信息和签名信息组合成一个完整的JWT,并以字符串形式返回
        .compact();
        System.out.println(jwt);
        return jwt;
        }

3. JWT解析token

    /**
     * 解析JWT令牌
     * @param token
     * @param key
     */
    public static void parseToken(String token,String key){
        try{
            System.out.println("开始解析令牌...");
            Claims claims = Jwts.parser()//创建一个解析器
                    .setSigningKey(key)//设置验证签名的密钥
                    .parseClaimsJws(token)//传入需要进行解析的token并解析
                    .getBody();//从Jws<Claims>对象中获取负载信息
            System.out.println(claims);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

4. 测试结果

    public static void main(String[] args) {
        String key = "3f2e1d4c5b6a79808f7e6d5c4b3a29181716151413121110";
        String token = getToken(key);
        parseToken(token,key);
    }

      输出结果:

在这里插入图片描述

5. JWT加密、解密工具类

/**
 * 提供Jwt工具类
 * 提供Token生成和验证方法
 * @author Huan
 */
@Component //托管spring容器
public class JwtUtil {
    // 密钥
    private static final String key = "3f2e1d4c5b6a79808f7e6d5c4b3a29181716151413121110";

    /**
     * 生成JWT令牌
     * @param payload
     * @return
     */
    public String getToken(Map payload){
        //设置头部信息
        Map headers = new HashMap();
        //设置签名算法
        headers.put("alg", "HS256");
        //设置令牌类型
        headers.put("typ", "JWT");

        //生成令牌
        String jwt = Jwts.builder()
                //设置头信息
                .setHeaderParams(headers)
                //设置负载信息
                .setClaims(payload)
                //使用HS256算法和密钥对JWT进行签名
                .signWith(SignatureAlgorithm.HS256,key)
                //将之前设置的头部信息、负载信息和签名信息组合成一个完整的JWT,并以字符串形式返回
                .compact();
        System.out.println(jwt);
        return jwt;
    }

    /**
     * 解析JWT令牌
     * @param token
     * @return
     */
    public Claims parseToken(String token){
        try{
            System.out.println("开始解析令牌...");
            Claims claims = Jwts.parser()//创建一个解析器
                    .setSigningKey(key)//设置验证签名的密钥
                    .parseClaimsJws(token)//传入需要进行解析的token并解析
                    .getBody();//从Jws<Claims>对象中获取负载信息
            System.out.println(claims);
            return claims;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}

链接:

JWT官方地址: https://jwt.io/

JWT官方文档: https://github.com/jwtk/jjwt

JWT官方文档快速开始: https://github.com/jwtk/jjwt?tab=readme-ov-file#quickstart

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 一个简单的中断信号实现

1.查看手册&#xff0c;学习中断处理图 流程&#xff1a;&#xff08;次级源->开关&#xff09;到 源挂起 到 开关 到 处理优先级 到 中断挂起标志 到 CPSR里面的开关&#xff08;图中未展现&#xff09; 最后cpu处理 此次我们先使用k1按键实现中断&#xff0c;即是eint8 …

requestIdleCallback和requestAnimationFrame有什么区别?

由react fiber引起的关注 组件树转为链表&#xff0c;可分段渲染渲染时可以暂停&#xff0c;去执行其他高优先级任务&#xff0c;空闲时在继续渲染&#xff08;JS是单线程的&#xff0c;JS执行的时候没法去DOM渲染&#xff09;如何判断空闲&#xff1f;requestIdleCallback 区…

想入门网络安全却不知道怎么入手,看这一篇就够了!

先聊聊&#xff0c;学习网络安全方向会遇到哪些问题&#xff1f; 打基础的时间长 学基础花费了很长的时间&#xff0c;光学语言都有好几门&#xff0c;有的人会止步于学习linux系统及命令的路上&#xff0c;更多的人会停在学习语言上面&#xff1b; 知识点掌握的不够清楚 对…

ML18_EM算法

1. 参数在贝叶斯网络中指的什么 2. 随机变量在贝叶斯网络中指的什么 在贝叶斯网络中&#xff0c;“随机变量”指的是网络中的节点&#xff0c;这些节点代表不确定事件或属性&#xff0c;它们可以取不同的值&#xff0c;并且这些值的概率分布通常未知或部分未知。随机变量可以表…

手搓LLM大模型:从零开始构建大语言模型

在人工智能的世界里&#xff0c;大型语言模型&#xff08;LLMs&#xff09;无疑是最引人注目的明星之一。这些深度神经网络模型的出现&#xff0c;为自然语言处理&#xff08;NLP&#xff09;领域带来了前所未有的变革。那么&#xff0c;这些模型究竟是如何工作的&#xff1f;它…

2024最新推荐10款英文免费录屏软件,想要录制电脑屏幕的你快看过来

你是否曾想过&#xff0c;只需几个简单的步骤&#xff0c;就能将你的电脑屏幕变成一个生动的视频故事&#xff1f;无论是展示你的游戏技巧&#xff0c;还是创建教育视频&#xff0c;录屏软件都能助你一臂之力。但面对市场上琳琅满目的录屏工具&#xff0c;选择一个合适的可能是…

【卡码网C++基础课 19.洗盘子】

目录 题目描述与分析一、栈二、栈的操作三、代码编写 题目描述与分析 题目描述&#xff1a; 在餐厅里&#xff0c;洗盘子的工作需要使用到栈这种数据结构。 假设你手里有一个盘子堆放区。现在需要模拟洗盘子的过程&#xff0c;每个盘子都有一个编号。 盘子堆放区操作说明&…

计算机网络-VRRP切换与回切过程

前面我们学习了VRRP选举机制&#xff0c;根据VRRP优先级与IP地址确定主设备与备份设备&#xff0c;这里继续进行主备切换与主备回切以及VRRP抢占模式的学习。 一、VRRP主备切换 主备选举时根据优先级选择主设备&#xff0c;状态切换为Master状态&#xff0c;那当什么时候会切换…

Verilog语法+:和-:有什么用?

Verilog语法:和-:主要用于位选择&#xff0c;可以让代码更简洁。 一、位选择基础 在Verilog中&#xff0c;位选择可以通过直接索引来实现&#xff0c;例如&#xff1a; reg [7:0] data; wire select_a; wire [2:0] select_b; assign select_a data[3]; assign select_b …

【sensor】激光雷达的分类和优缺点(六)

【sensor】镜头评价指标及测试方法&#xff08;一&#xff09; 【sensor】镜头评价指标及测试方法(二)—畸变与分辨率 【sensor】镜头评价指标及测试方法&#xff08;三&#xff09;--------测量原理及3D相机调查 【sensor】镜头评价指标及测试方法【四】————手机摄像头调查…

PAT甲级-1044 Shopping in Mars

题目 题目大意 一串项链上有n个钻石&#xff0c;输入给出每个钻石的价格。用m元买一个连续的项链子串&#xff08;子串长度可为1&#xff09;&#xff0c;如果不能恰好花掉m元&#xff0c;就要找到最小的大于m的子串&#xff0c;如果有重复就输出多个&#xff0c;按递增顺序输…

2.2ceph集群部署准备-软件准备上

系统的选择 操作系统的选取&#xff0c;除了要考虑ceph本身的运行&#xff0c;一般情况下还需要考虑的因素有如下几点 系统本身的稳定性 目前稳定可靠的系统主要是基于x86和arm的linux系统&#xff0c;ceph并不能安装到windows上&#xff0c;分支上&#xff0c;debian和redhat…

sponge创建的服务与dtm连接使用etcd、consul、nacos进行服务注册与发现

本文介绍sponge创建的 transfer 服务(grpc)如何与 dtm 使用服务注册与发现连接的。此示例在同一台机器上运行的服务&#xff0c;默认 IP 地址为 127.0.0.1。如果服务运行在不同的机器上&#xff0c;请在 transfer 和 dtm 的配置文件中&#xff0c;将 127.0.0.1 替换为相应的主机…

TL431精密可调并联稳压器

TL431是一种由德州仪器(TI)公司生产的可调精密并联稳压器&#xff0c;具有较广的工作电压范围&#xff08;2.5V-36V&#xff09;和优异的电流调节能力。作为一种基准电压源&#xff0c;它广泛用于电源设计、稳压电路以及精密参考电源等应用场合。 TL431的内部结构 TL431具有三…

Zotero引用参考文献常见问题及解决方法

一、显示经典版“添加引注”对话框 使用Word插入参考文献时&#xff0c;会出现引用对话框&#xff0c;默认是图1形式&#xff0c;需要搜索对应文章或者点击下拉箭头才显示保存的文献&#xff0c;很不方便。 图 1 想要默认显示文献&#xff0c;在Zotero中左上角的“编辑”→“首…

python环境中,pytorch、tensorflow、opencv 包的安装

知不足而奋进&#xff0c;望远山而前行 —— 24.9.6 tensorflow pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu1.13.1 pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple pytorch pip install torch2.0.0cu118 torchvision0.15…

基于人工智能的音乐情感分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 音乐情感分类是通过对音乐音频信号进行分析&#xff0c;识别出音乐传递的情感&#xff0c;如“愉快”、“悲伤”、“愤怒”等。该技术…

SVD降维

文章目录 一、SVD降维的基本原理二、SVD降维的步骤三、SVD降维的优点四、SVD降维的应用五、代码应用六、SVD降维的局限性 一、SVD降维的基本原理 SVD是线性代数中的一种技术&#xff0c;它将一个矩阵A分解为三个矩阵的乘积&#xff1a;A UΣV^T。其中&#xff0c;U和V是正交矩…

【项目二】C++高性能服务器开发——日志系统(各种适配器)

感谢前人的总结&#xff0c;没有他们&#xff0c;我不会这么快学完&#xff65;ω&#xff65; 知识点备忘录操作记录 知识点备忘录 数据除了打印到控制台还需要打印到本地磁盘和远程日志&#xff0c;所以需要适配器来干这活 涉及多个适配器&#xff0c;打印到控制台的、打印到…

【操作系统】进程同步之Unix域套接字

域套接字是一种高级的进程间通信的方法。 Unix域套接字可以用于同一机器多个进程间通信。 下图分别是服务端和客户端怎么使用域套接字&#xff1a; 服务端&#xff1a; 客户端&#xff1a; 分别编译后可以建立连接同步通信。 提供了单机简单可靠的通信同步服务。 只能在单…