JWTUtil工具类
写一个Jwt工具类
导入如下pom.xml依赖
<!--fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.33</version></dependency><!--jwt依赖--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</version></dependency>
写一个JwtUtil工具类
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.UUID;/*** JWT工具类* @author zhangsan*/
public class JwtUtil {/*** 有效期为 60 * 60 * 1000 一个小时*/public static final Long JWT_TTL = 60 * 60 *1000L;/*** 设置秘钥明文*/public static final String JWT_KEY = "sangeng";public static String getUUID(){return UUID.randomUUID().toString().replaceAll("-", "");}/*** 生成jtw* @param subject token中要存放的数据(json格式)* @return Jwt值*/public static String createJWT(String subject) {// 设置过期时间JwtBuilder builder = getJwtBuilder(subject, null, getUUID());return builder.compact();}/*** 生成jtw* @param subject token中要存放的数据(json格式)* @param ttlMillis token超时时间* @return Jwt值*/public static String createJWT(String subject, Long ttlMillis) {// 设置过期时间JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());return builder.compact();}private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;SecretKey secretKey = generalKey();long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);if ( ttlMillis == null) {ttlMillis = JwtUtil.JWT_TTL;}long expMillis = nowMillis + ttlMillis;Date expDate = new Date(expMillis);return Jwts.builder()//唯一的ID.setId(uuid)// 主题 可以是JSON数据.setSubject(subject)// 签发者.setIssuer("sg")// 签发时间.setIssuedAt(now)// 使用HS256对称加密算法签名, 第二个参数为秘钥.signWith(signatureAlgorithm, secretKey).setExpiration(expDate);}/*** 创建token* @param id Id* @param subject 主题* @param ttlMillis 时间戳* @return Jwt值*/public static String createJWT(String id, String subject, Long ttlMillis) {// 设置过期时间JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);return builder.compact();}public static void main(String[] args) throws Exception {// 需要存放在token中的数据(可以是json格式的字符串)String subject = "{\"user\":\"tom\"}";// 生成一个有效期为1小时的JWTString token = JwtUtil.createJWT(subject, JwtUtil.JWT_TTL);System.out.println("token is " + token);// 解析对应的tokenClaims claim = parseJWT(token);System.out.println("claim is " + claim);}/*** 生成加密后的秘钥 secretKey* @return 生成加密后的密钥*/public static SecretKey generalKey() {byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);return new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");}/*** 解析** @param jwt string值* @return 返回解析的值*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey = generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}}
运行结果,我们可以看到,可以生成一个token,也可以解析出来对应token里携带的内容

放到对应的Jwt在线解析,可以看到解码成右边所示

相关文章:
JWTUtil工具类
写一个Jwt工具类 导入如下pom.xml依赖 <!--fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.33</version></dependency><!--jwt依赖--><dependenc…...
【eNSP】企业网络架构实验——vlan间的路由通信(三)
VLAN间的路由是指不同VLAN之间的通信,通常VLAN是用来分割网络流量和提高网络安全性的。 一、VLAN 1. 什么是VLAN? VLAN,全称是虚拟局域网(Virtual Local Area Network),是一种将物理局域网(LA…...
软件测试基础二十九 (接口测试 mock)
Mock(模拟) 一、定义 Mock是在软件开发测试阶段使用的一种技术,用于模拟对象的行为。它主要用于隔离被测试单元(如函数、类或模块)与外部依赖,使得测试更加独立、可控,并且可以在不需要真实外…...
Learning RAG and Ragas
说明:这是我的学习笔记,很多内容转自网络,请查阅文章末尾的参考资料。 文章目录 RAGRagas评估框架评估维度评估指标Faithfulness (忠实度)Answer Relevance (答案相关度)Context Precision (上下文精确度)Context Recall (上下文召回率)Cont…...
Java项目实战II基于微信小程序的实习记录(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在当今竞争激烈的就业市场中࿰…...
GIT将源码推送新分支
1. 创建并切换到新分支 首先,确保你在本地创建了一个新的分支并切换到该分支: git checkout -b new-branch-namenew-branch-name 是你要创建的新分支名称,替换为你需要的名称即可。 2. 确保所有更改已提交 在推送之前,确保你的…...
Python习题 250:删除空文件夹
(编码题)编写一段 Python 代码,删除指定目录的空文件夹。 参考答案: 使用 pathlib 库可以更简洁地处理文件路径。下面是一个使用 pathlib 库递归删除空文件夹的 Python 代码:from pathlib import Pathdef remove_empty_dirs(directory):# 遍历目录及其子目录for path in…...
基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较
文章目录 基本数据类型的比较整数类型浮点类型字符类型布尔类型小结 有符号和无符号整数二进制补码表示精度丢失问题结论 在编程语言中,基本数据类型是构建更复杂数据结构的基础。在本文中,我们将比较 Kotlin、Dart (Flutter)、Java 和 C 中的基本数据类…...
源码解析-Spring Eureka(更新ing)
源码解析-Spring Eureka 文章目录 源码解析-Spring Eureka前言一、从Spring.factory和注解开始二、重要的一步EurekaServerInitializerConfiguration三、初始化了什么?自动保护 四, 重新回到EurekaServerAutoConfiguration 前言 无 一、从Spring.factory和注解开始…...
python调用百度通用翻译API
文章目录 1. 简介2. 使用步骤3. api调用实现4. 编码实现 1. 简介 前段时间在做视频语音识别生成多语种字幕时,使用了百度翻译通用翻译api进行翻译。百度翻译平台经过个人认证之后,每月有200万字符的免费翻译额度。还是比较舒服的。 百度翻译开放平台是百…...
Timeline动画「硬切」的问题
1)Timeline动画「硬切」的问题 2)移动平台纹理压缩格式选择ASTC,美术出图还需遵守POT吗 3)如何去掉DOTS Unity.Entities.Graphics创建的BatchRendererGroup的UI相机回调 4)Timeline播放动画会产生位移的问题 这是第409…...
CentOS 9 配置网卡
在 CentOS 9 中配置网卡,通常涉及以下几个步骤: 1. 查看网络接口 首先,确认系统上存在的网络接口。可以使用 ip 命令或 ifconfig 命令查看网络接口的状态。 ip a 或者: ifconfig 这将列出所有可用的网络接口(例如…...
redis7.x源码分析:(2) adlist双向链表
链表是一种常用的数据结构(如果不了解,请先学习数据结构),由于c语言本身没有实现标准的链表库,所以redis自己实现了一个双向链表。 双向链表在redis内部的使用非常的多,几乎所有模块中都有用到。 下面看下它…...
KUKU FM 音频Linux平台免费下载工具
1.工具名称:kuku-dl 功能: ✅ 下载播客、故事和有声读物! ✅ 获取所有元数据和封面艺术品。 ✅ 支持字幕! 3.使用说明: 3.1. 直接镜像github源码库 👉 git clone https://github.com/bunnykek/kuku-…...
《Django 5 By Example》阅读笔记:p105-p164
《Django 5 By Example》学习第5天,p105-p164总结,总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安…...
网络延迟对Python爬虫速度的影响分析
Python爬虫因其强大的数据处理能力和灵活性而被广泛应用于数据抓取和网络信息收集。然而,网络延迟是影响爬虫效率的重要因素之一。本文将深入探讨网络延迟对Python爬虫速度的影响,并提供相应的代码实现过程,以帮助开发者优化爬虫性能。 网络…...
微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation无法打开页面问题
1.问题 微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation打开地图页面后,点击该页面下方“到这里”按钮,显示无法打开。如下图: 3.解决方案 在内嵌h5中不使用uniapp的api打开地图,而在h5页面事件处理程序中去跳转新的小程序页面,在该新页面去使用微信小程序…...
创建一个简单的基于STM32的FreeRTOS应用
使用STM32CubeIDE生成。 1,使能FreeRTOS 2,选择版本 CMSIS_V1 3 设置参数USE_NEWLIB_REENTRANT 如果不设置,会在生成代码的时候提示错误 4,设置时钟TIM1作为系统时钟 5,设置Task …...
【Revit二次开发】创建Ribbon选项卡与带图标的按钮
效果图 创建一个叫做“开发的插件”的选项卡, 选项卡内有一个叫做“Hello”的图标按钮, 点击按钮后运行一个命令, 该命令弹出提示框“Hello Revit!”。 在此示例基础上,可以根据需要替换图标、文字、命令功能。 步骤 安装Revit…...
Win11 终端执行 python xxx.py 没反应
在 Win11 上写了一段 Python 代码来分析日志文件, 发现执行没反应。是在 VSCode 里的终端中执行的 python log_stats.py, 是 PowerShell; 也尝试了 cmd, 情况一样。 一开始怀疑代码写错,直到故意在代码里加打印,发现没…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
Yii2项目自动向GitLab上报Bug
Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...
