JWT生成、解析token

目录

  • 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.rhkb.cn/news/418047.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker中部署nacos 开启鉴权springboot连接配置

nacos开启鉴权后发现各种连不上。 按道理说所有的东西都是采用同一个docker网络连接的&#xff0c;连接的时候可以采用容器名连接。 下面是刚开始springboot中的链接配置。增加了用户名和密码 这里nacos我们用到了注册中心和配置中心。启动项目的时候配置中心没有问题&#x…

企业选ETL还是ELT架构?

作为数据处理的重要工具&#xff0c;ETL工具被广泛使用&#xff0c;同时ETL也是数据仓库中的重要环节。本文将从解释ETL工具是怎么处理数据&#xff0c;同时介绍ELT和ETL工具在企业搭建数据仓库的重要优势。 一、什么是ETL? ETL是Extract-Transform-Load的缩写&#xff0c;将…

RabbitMQ 应用

文章目录 前言1. Simple 简单模式2. Work Queue 工作队列模式3. Pubulish/Subscribe 发布/订阅模式Exchange 的类型 4. Routing 路由模式5. Topics 通配符模式6. RPC RPC通信7. Publisher Confirms 发布确认1. 单独确认2. 批量确认3. 异步确认 前言 前面我们学习了 RabbitMQ 的…

数据结构--串的模式匹配算法

文章目录 串的模式匹配算法1.朴素算法&#xff08;Brute-Force(BF)暴力算法&#xff09;BF算法分析 2.KMP算法字符串的最长公共前后缀部分匹配表&#xff08;前缀表&#xff09;Next 串的模式匹配算法 查找子串&#xff08;模式串&#xff09;在主串中的位置的操作通常称为串的…

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支&#xff0c;它基于集合论和数学形态学的理论&#xff0c;专门用于分析和处理图像中的形状和结构。图像形…

基于YOLOv10的垃圾检测系统

基于YOLOv10的垃圾检测系统 (价格90) 包含 [CardBoard, Glass, Metal, Paper, Plastic] 5个类 [纸板, 玻璃, 金属, 纸张, 塑料] 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的…

Spring之Bean的生命周期 2024-9-6 19:47

目录 什么是Bean的生命周期为什么要知道Bean的生命周期Bean的生命周期之5步Bean生命周期之7步Bean生命周期之10步 声明&#xff1a;本章博客内容采自老杜2022spring6 语雀文档 什么是Bean的生命周期 Spring其实就是一个管理Bean对象的工厂。它负责对象的创建&#xff0c;对象的…

webpack+lite-server 构建项目示例

首先安装以下库 npm install --save-dev webpack webpack-cli lite-server npm install --save-dev babel-loader babel/core babel/preset-env项目结构 webpack.config.js 配置 const path require("path");module.exports {entry: "./src/index.js",…

数据分析-12-多个时间序列数据的时间戳对齐以及不同的方式补点

参考python时间序列数据的对齐和数据库的分批查询 1 问题场景与分析 1.1 场景 在医院的ICU里,须要持续观察病人的各项生命指标。这些指标的采集频率每每是不一样的(例如有些指标隔几秒采集一个,有些几个小时采集一个,有些一天采集一个),并且有些是按期的,有些是不按期的…

SenseGlove机器臂遥操作控制:技术优势与高危作业安全保障

在追求高效与安全的工业时代&#xff0c;高危作业任务始终是行业发展的一大障碍。SenseGlove力反馈手套机器臂遥操作应用案例的出现&#xff0c;凭借其独特的技术优势&#xff0c;为解决这一难题提供了创新性解决方案。 一、技术优势 高精度的力反馈技术&#xff1a;SenseGlove…

传统CV算法——特征匹配算法

Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法&#xff0c;经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括&#xff1a; 特征提取&#xff…

设计模式之装饰器模式:让对象功能扩展更优雅的艺术

一、什么是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff08;Structural Pattern&#xff09;&#xff0c;它允许用户通过一种灵活的方式来动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c;装饰器模式相比使用…

使用html+css+layui实现动态表格组件

1、概述 需求&#xff0c;表格第一列指标可配置通过后端api传进来&#xff0c;表格显示数据以及鼠标触摸后气泡弹出层提示信息都是从后端传过来&#xff0c;实现动态表格的组件&#xff01;&#xff01;实现效果如下&#xff1a; 接口标准数据格式如下&#xff1a; {"da…

自动驾驶---什么是Frenet坐标系?

1 背景 为什么提出Frenet坐标系&#xff1f;Frenet坐标系的提出主要是为了解决自动驾驶系统在路径规划的问题&#xff0c;它基于以下几个原因&#xff1a; 符合人类的驾驶习惯&#xff1a; 人类驾驶员在驾驶过程中&#xff0c;通常不会关心自己距离起点的横向和纵向距离&#x…

TypeError:未绑定方法

TypeError: unbound method 错误通常发生在类方法被调用时&#xff0c;但没有正确绑定到实例。这通常意味着你试图在类本身上调用一个实例方法&#xff0c;或者没有使用正确的方式创建类实例。 1、问题背景 某位开发者在尝试创建一个类似于经典的 Pratt 递归下降解析器时遇到了…

目前国内外AI,尤其大模型发展的一些新进展

目前&#xff0c;国内外在AI大模型发展方面均取得了一系列的新进展。以下是一些关键点和发展路径的对比&#xff1a; 国际进展 技术创新与应用&#xff1a;国际上的大模型通常由大型科技公司如谷歌、微软、Meta等主导&#xff0c;它们利用现有的大模型技术来增强原有的产品和…

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSent为false在左侧&#xff0c;为true在右…

Google play最新政策更新和重要提醒

我们都知道&#xff0c;谷歌会定期更新其政策&#xff0c;而政策的变更通常对开发者及其团队的要求会更为严格&#xff0c;也会增加应用上架的一些限制条件&#xff0c;以此提高应用在谷歌商店的质量。 一起来看看Google play最近的一些政策更新和需要注意的地方。 新政策要求 …

【C++】简单易懂的vector迭代器

一、迭代器的本质 vector的迭代器本质上就是一个被封装的指针。迭代器的用法和指针的用法十分相似&#xff0c;就是一个像指针的假指针&#xff0c;我们不妨把迭代器看作一个伪指针。 二、迭代器的使用 句式&#xff08;可以看到迭代器和指针很像&#xff09;&#xff1a; …

5-2 检测内存容量

1 使用的是bios 中断&#xff0c; 每次进行检测都会返回一块 内容。并且标志上&#xff0c;这块内存是否可用。 接下来是代码&#xff1a; 首先是构建 一个文件夹&#xff0c; 两个文件。 types.h 的内容。 #ifndef TYPES_H #define TYPES_H// 基本整数类型&#xff0c;下面的…