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

JWT(JSON Web Token )令牌

1、介绍

jwt就是将原始的json数据格式进行了安全的封装,这样就可以直接基于jwt在通信双方安全的进行信息传输了。

2、jwt组成

第一部分:Header(头), 记录令牌类型、签名算法等。 例如:{"alg":"HS256","type":"JWT"}

第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。 例如:{"id":"1","username":"Tom"}

第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。

3、目的

签名的目的就是为了防jwt令牌被篡改,而正是因为jwt令牌最后一个部分数字签名的存在,所以整个jwt 令牌是非常安全可靠的。一旦jwt令牌当中任何一个部分、任何一个字符被篡改了,整个令牌在校验的时候都会失败,所以它是非常安全可靠的。

4、引以赖

<!-- JWT依赖-->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>

5、工具类

public class JwtUtils {private static String signKey = "islunatic";//签名密钥private static Long expire = 43200000L; //有效时间/*** 生成JWT令牌* @param claims JWT第二部分负载 payload 中存储的内容* @return*/public static String generateJwt(Map<String, Object> claims){String jwt = Jwts.builder().addClaims(claims)//自定义信息(有效载荷).signWith(SignatureAlgorithm.HS256, signKey)//签名算法(头部).setExpiration(new Date(System.currentTimeMillis() + expire))//过期时间.compact();return jwt;}/*** 解析JWT令牌* @param jwt JWT令牌* @return JWT第二部分负载 payload 中存储的内容*/public static Claims parseJWT(String jwt){Claims claims = Jwts.parser().setSigningKey(signKey)//指定签名密钥.parseClaimsJws(jwt)//指定令牌Token.getBody();return claims;}
}

6、用例 (JWT令牌存储在浏览器的本地存储空间local storage中了 )

@RestController
@Slf4j
public class LoginController {//依赖业务层对象@Autowiredprivate EmpService empService;@PostMapping("/login")public Result login(@RequestBody Emp emp) {//调用业务层:登录功能Emp loginEmp = empService.login(emp);//判断:登录用户是否存在if(loginEmp !=null ){//自定义信息Map<String , Object> claims = new HashMap<>();claims.put("id", loginEmp.getId());claims.put("username",loginEmp.getUsername());claims.put("name",loginEmp.getName());//使用JWT工具类,生成身份令牌String token = JwtUtils.generateJwt(claims);return Result.success(token);}return Result.error("用户名或密码错误");}
}

7、注意

名称类型是否必须默认值备注其他信息
codenumber必须响应码, 1 成功 ; 0 失败
msgstring非必须提示信息
datastring必须返回的数据 , jwt令牌

相关文章:

JWT(JSON Web Token )令牌

1、介绍 jwt就是将原始的json数据格式进行了安全的封装&#xff0c;这样就可以直接基于jwt在通信双方安全的进行信息传输了。 2、jwt组成 第一部分&#xff1a;Header(头&#xff09;&#xff0c; 记录令牌类型、签名算法等。 例如&#xff1a;{"alg":"HS256…...

leetcode 力扣刷题 滑动窗口 部分题解(记录)

力扣刷题 滑动窗口相关的部分题解 209. 长度最小的子数组904. 水果成篮76. 最小覆盖子串 209. 长度最小的子数组 leetcode题目链接 209.长度最小的子数组 题目内容是这样的&#xff1a;给定一个含有 n个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的…...

Intellij IDEA SBT依赖分析插件

可分析模块和传递依赖 安装完插件后&#xff0c;由于IDEA BUG&#xff0c;会出现两个分析按钮&#xff0c;一个是gradle的&#xff0c;一般是后者是新安装的sbt。 选择需要分析的模块 只需要在project/plugins.sbt中添加代码&#xff0c;启动官方分析插件addDependencyTreeP…...

MySQL中事务特性以及隔离机制

目录 一、什么是事务 二、事务特性——即ACID特性 三、事务的隔离级别 1、脏读 2、不可重复读 3、幻读 Read uncommitted&#xff1a; Read committed: Repeatable read: Serializable&#xff1a; 一、什么是事务 事务&#xff08;Transaction&#xff09;——一个最…...

Docker知识(详细笔记)

概览图 文章目录 概览图docker 知识速查1. 初识 Docker1.1 概念1.2 特点1.3 架构1.4 应用场景1.5 安装 Docker1.6 配置 Docker 镜像 2. Docker 命令2.1 Docker 进程相关命令2.2 Docker 镜像相关命令2.3 Docker 容器相关命令 3. Docker 容器的数据卷3.1 数据卷概念及作用3.1.1 概…...

【C#】获取已安装的NETFramework版本集合

代码 /// <summary>/// Windows信息/// </summary>public partial class WindowsInfo{/// <summary>/// 获取已安装的NETFramework版本集合/// </summary>/// <returns></returns>public static List<string> GetInstalledNETFramew…...

对字符串中所有单词进行倒排-C语言/Java

描述 输入一个字符串&#xff0c;输出字符串中单词的倒序。 要求 构成单词的字符只有26个大写或小写英文字母。非构成单词的字符均视为单词间隔符&#xff1b;倒排后的单词间隔符以一个空格表示&#xff1b;如果原字符串中相邻单词间有多个间隔符时&#xff0c;倒排转换后也只…...

Kubernetes入门 四、Pod核心

目录 什么是PodPod与容器不同Pod如何管理多个容器Pod的管理-工作负载K8s中的资源清单创建使用Pod直接创建Pod使用 Deployment 创建Pod 环境变量重启策略镜像拉取策略访问 DNS 的策略资源限制初始化容器临时容器&#xff08;了解&#xff09; 什么是Pod Pod 是可以在 Kubernete…...

【JAVA】数组练习

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 数组练习 1. 数组转字符串2. 数组拷贝3.…...

每日一题——不同路径的数目(一)

题目 一个机器人在mn大小的地图的左上角&#xff08;起点&#xff09;。 机器人每次可以向下或向右移动。机器人要到达地图的右下角&#xff08;终点&#xff09;。 可以有多少种不同的路径从起点走到终点&#xff1f; 数据范围&#xff1a;0<n,m≤100&#xff0c;保证计算结…...

innodb的锁

一致性锁定读和一致性非锁定读 Read Committed和Repetable Read级别下采用MVCC 实现非锁定读 但在一些情况下&#xff0c;要使用加锁来保障数据的逻辑一致性 自增列 锁的算法 唯一值 MySQL 中关于gap lock / next-key lock 的一个问题_呜呜呜啦啦啦的博客-CSDN博客 RR可以通过…...

Jmeter-压力测试工具

文章目录 Jmeter快速入门1.1.下载1.2.解压1.3.运行 2.快速入门2.1.设置中文语言2.2.基本用法 Jmeter快速入门 1s内发送大量请求&#xff0c;模拟高QPS&#xff0c;用以测试网站能承受的压力有多大 Jmeter依赖于JDK&#xff0c;所以必须确保当前计算机上已经安装了JDK&#xff0…...

【KVM虚拟化环境部署】

环境部署 KVM虚拟化环境 1、装系统时手动选择安装 2、CentOS 7 最小化安装 yum install qemu-kvm qemu-img libvirt -y yum install virt-install libvirt-python virt-manager python-virtinst libvirt-client -y安装好CentOS 7后&#xff0c;去设置里面点击处理器&#x…...

030 - 定点类型(精确值)

-DECIMAL&#xff0c;NUMERIC&#xff1a; 该DECIMAL和NUMERIC 类型的存储精确的数值数据。当保留精确度很重要时&#xff0c;例如使用货币数据&#xff0c;则可以使用这些类型。在MySQL中&#xff0c;NUMERIC实现为DECIMAL&#xff0c;因此以下有关的说明DECIMAL同样适用于 NU…...

生活随笔,记录我的日常点点滴滴.

前言 &#x1f618;个人主页&#xff1a;曲终酣兴晚^R的小书屋&#x1f971; &#x1f615;作者介绍&#xff1a;一个莽莽撞撞的&#x1f43b; &#x1f496;专栏介绍&#xff1a;日常生活&往事回忆 &#x1f636;‍&#x1f32b;️每日金句&#xff1a;被人暖一下就高热&…...

C语言:每日一练(选择+编程)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;打印1到最大的n位数 示例1 思路一&#xff1a; 题二&#xff1a;计算日期到天数转换 示例1 思路一&#xf…...

Prompt、RAG、微调还是重新训练?选择正确的生成式 AI 的方法指南

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 这篇博客试图根据一些常见的可量化指标&#xff0c;为您选择适合您用例的生成式人工智能方法提供指导。 生成式 AI 正在以惊人的速度发展&#xff0c…...

Java实现单例模式的几种方法

单例模式作为23中设计模式中最基础的设计模式&#xff0c;一般实现方式为 ①私有化构造方法 ②提供一个获取对象的静态方法 除此之外&#xff0c;实现单例模式的方法还有很多种&#xff0c;这篇文章主要介绍实现单例模式的几种方法。 目录 一、懒汉式单例 二、懒汉式单例优化…...

VIOOVI:标准的作业规范要求是什么?标准化作业规范怎么写?

本文围绕“标准化作业”展开论述&#xff0c;分享一些关于标准化作业以及标准的作业规范等相关知识。 什么是标准化作业&#xff1f; 标准化作业是一种以人的行为为中心&#xff0c;在一个操作序列中有效地进行生产而没有浪费的操作方法。 标准化作业的前提即&#xff1a;关注…...

WPF中的GridSplitter使用原则

WPF中的GridSplitter使用原则 GridSplitter对象必须放在Grid单元格中。可以预留一行或者列的Height或Width属性设置为auto。GridSplitter对象总是改变整行或整列的尺寸&#xff0c;为使该对象外观和行为保持一致&#xff0c;需要拉伸GridSplitter对象使其穿越整行或整列&#…...

FPGA时序路径实战解析:从理论到约束的四大关键场景

1. 时序路径基础&#xff1a;FPGA设计的生命线 第一次接触FPGA时序约束时&#xff0c;我盯着时序报告里密密麻麻的路径延迟数据发懵——这些红色警告就像交通信号灯&#xff0c;而我完全看不懂它们的规则。直到真正理解了时序路径这个概念&#xff0c;才明白它其实就是FPGA设计…...

告别WechatRealFriends:WeFriends帮你实现微信好友关系管理无缝过渡

告别WechatRealFriends&#xff1a;WeFriends帮你实现微信好友关系管理无缝过渡 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRe…...

MOS管LC震荡电路偏置电压调整全攻略:LTspice仿真与实测对比

MOS管LC震荡电路偏置电压调整全攻略&#xff1a;LTspice仿真与实测对比 在电子电路设计中&#xff0c;MOS管LC震荡电路因其结构简单、频率稳定而被广泛应用。然而&#xff0c;要让这种电路发挥最佳性能&#xff0c;偏置电压的精确调整往往成为工程师面临的最大挑战。本文将带您…...

Flink状态后端选型指南:从Memory到RocksDB的5个实战避坑建议

Flink状态后端选型指南&#xff1a;从Memory到RocksDB的5个实战避坑建议 当你在深夜收到Flink作业崩溃的告警&#xff0c;打开日志发现是OOM&#xff08;内存溢出&#xff09;导致的失败&#xff0c;而第二天业务方还在等着实时报表数据——这种场景对中高级Flink开发者来说并不…...

Vue+SpringBoot全栈项目搭建:手把手教你实现一个带分页和Swagger的CRUD应用

VueSpringBoot全栈开发实战&#xff1a;从零构建企业级CRUD应用 1. 全栈技术选型与项目初始化 在当今快速迭代的互联网开发领域&#xff0c;前后端分离架构已成为主流选择。Vue.js作为渐进式前端框架&#xff0c;以其轻量级和响应式数据绑定特性&#xff0c;成为构建用户界面…...

微信聊天记录完全掌控指南:如何永久保存并深度分析你的数字记忆

微信聊天记录完全掌控指南&#xff1a;如何永久保存并深度分析你的数字记忆 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending…...

告别繁琐的pip安装,用快马平台快速搭建python数据分析原型

最近在做一个数据分析的小项目时&#xff0c;我深刻体会到了Python环境配置的繁琐。每次换电脑或者重装系统&#xff0c;都要重新安装Python、配置pip、解决各种依赖冲突&#xff0c;光是环境准备就能耗掉半天时间。特别是当需要快速验证一个想法时&#xff0c;这种等待简直让人…...

Dify工作流HTTP请求配置全攻略:从基础到进阶的系统优化指南

Dify工作流HTTP请求配置全攻略&#xff1a;从基础到进阶的系统优化指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-…...

Python:图解 NumPy

NumPy 是 Python 中最受欢迎的第三方库之一。本文将通过图示和更具实践性的方式介绍其使用方法&#xff0c;使你能够通过直观理解来加深记忆。一、导入 NumPyimport numpy as np二、NumPy 数组的创建NumPy 支持从列表、元组、字符串、缓冲区、迭代器等多种数据来源创建数组。1、…...

百川2-13B-4bits量化原理解析:OpenClaw任务中的精度损失补偿方案

百川2-13B-4bits量化原理解析&#xff1a;OpenClaw任务中的精度损失补偿方案 1. 从一次失败的自动化任务说起 上周我尝试用OpenClaw自动整理一批技术文档时遇到了奇怪的现象&#xff1a;当AI助手处理到第37个Markdown文件时&#xff0c;突然开始重复生成相同的段落内容。查看…...