什么是JWT?为什么用JWT?JWT的实战案例
JWT学习资料
- 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】
- 2.为什么要用JWT?
- 3.JWT 使用
- 全局变量
- JWT 创建
- JWT的应用(token放在返回信息中)
- JWT验证
- 4.JWT 原理
1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。
JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)
- 头部(Header):包含了关于生成该 JWT 的信息以及所使用的算法类型。
- 载荷(Payload):包含了要传递的数据,例如身份信息和其他附属数据。JWT 官方规定了7个字段,供选用:
- iss(Issuer):签发者。
- sub(Subject):主题。
- aud(Audience):接收者。
- exp(Expiration time):过期时间。
- onbf(Not Before):生效时间。
- iat(Issued At):签发时间。
- jti(JWT ID):编号。
- 签名(Signature):使用密钥对头部和载荷进行签名,以验证其完整性。
2.为什么要用JWT?
JWT 相较于传统的基于会话(Session)的认证机制,具有以下优势:
- 无需服务器存储状态:传统的基于会话的认证机制需要服务器在会话中存储用户的状态信息,包括用户的登录状态、权限等。而使用 JWT,服务器无需存储任何会话状态信息,所有的认证和授权信息都包含在 JWT 中,使得系统可以更容易地进行水平扩展。
- 跨域支持:由于 JWT 包含了完整的认证和授权信息,因此可以轻松地在多个域之间进行传递和使用,实现跨域授权。
- 适应微服务架构:在微服务架构中,很多服务是独立部署并且可以横向扩展的,这就需要保证认证和授权的无状态性。使用 JWT 可以满足这种需求,每次请求携带 JWT 即可实现认证和授权。
- 自包含:JWT 包含了认证和授权信息,以及其他自定义的声明,这些信息都被编码在 JWT 中,在服务端解码后使用。JWT 的自包含性减少了对服务端资源的依赖,并提供了统一的安全机制。
- 扩展性:JWT 可以被扩展和定制,可以按照需求添加自定义的声明和数据,灵活性更高。总结来说,使用 JWT相较于传统的基于会话的认证机制,可以减少服务器存储开销和管理复杂性,实现跨域支持和水平扩展,并且更适应无状态和微服务架构。
3.JWT 使用
在 Java 中可以借助 JWT 框架辅助来使用 JWT,例如 hutool 框架,它的介绍:
https://doc.hutool.cn/pages/IWTUtil/
全局变量
/*** 全局变量类*/
public class AppVariable {/** JWT 私钥 */public static final String JWT_KEY = "blog-spring-cloud-jwt";/** 登录的用户 Token key */public static final String TOKEN_KEY = "Authorization";
}
JWT 创建
Map<String, Object> payload = new HashMap<String, Object>() {private static final long serialVersionUID = 1L;{put("uid", userinfo.getUid());put("manager", userinfo.getManager());// JWT 过期时间为 15 天put("exp", System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 15);}
};
String token = JWTUtil.createToken(payload, AppVariable.JWT_KEY.getBytes());
JWT的应用(token放在返回信息中)
HashMap<String, Object> result = new HashMap<>() {{put("token", token);put("uid", userinfo.getUid());put("username", userinfo.getUsername());put("manager", userinfo.getManager());
}};
return AjaxResult.success(result);
JWT验证
result = JWTUtil.verify(token, AppVariable.JWT_KEY.getBytes());
4.JWT 原理
JWT 的本质是:秘钥存放在服务器端,并通过某种加密手段进行加密和验证的机制。加密签名=某加密算法(header+payload+服务器端私钥)
相关文章:
什么是JWT?为什么用JWT?JWT的实战案例
JWT学习资料 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】2.为什么要用JWT?3.JWT 使用全局变量JWT 创建JWT的应用(token放在返回信息中)JWT验证 4.JWT 原理 1.什么是JWT?【头部(Header)、载荷(Payload)和签名(Signature)】 JWT(JS…...
SpringBoot+Vue小区物业管理系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码2.查询小区信息代码3.保存缴费信息代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootVue框架开发的小区物业管理系统。首先…...
在不使用js在情况下只用css实现瀑布流效果
使用到的是grid 布局,需要注意的是grid-template-rows: masonry; 目前只有Firefox 浏览器支持这个效果,而且还是一个实验性属性需要在设置里面开发实验性选项才行。 实例 <!DOCTYPE html> <html> <head><title>Document</ti…...
AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的
一个Android应用是如何被启动的 前言总结1. 启动Application1.1 拉起一个新的进程1.2 启动Application1.3 AMS阶段1.4 创建Instrumentation和Application 2. 启动Activity2.1 回到AMS,启动第一个Activity 参考资料 前言 基于源码API 28,30以后的版本启动…...
数据库事务隔离级别
前几天项目上合作公司的系统出现了一次死锁,突然想到由于近几年开发设计的系统并发用户比较少,很久没有碰到过死锁了,因此对死锁的概念也比较生疏了,需要温习一下。 事务 先从最基本的概念开始,事务、及其ACID特性。…...
Pytest 记录日志输出到控制台和写入文件
目录 自定义日志记录器和内置的日志记录器 项目代码 项目目录树 自定义日志记录器 函数源代码 pytest中定义和覆盖日志记录信息 使用cli定义Logging 使用pytest.ini定义Logging 修改单个测试级别的日志 日志输出的重要性不言而喻,不仅可以观测执行过程&…...
LINUX网络FTP服务
一、FTP服务 FTP服务:file transfer protocol :文件传输协议。在网络上进行双向传输,也是一个应用程序。不同的操作系统有不同的FTP软件,但使用的协议是一样的。 FTP协议基于TCP协议,有两个端口,即20和21。 20端口&…...
10 C++11
10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…...
java的封装
为什么要封装?在java的面向对象的思想中,封装是指将类的实现细节包装,隐藏起来的方法。封装可以防止本类的代码和数据被外部定义的代码随机访问。 如何进行封装? 在定义一个类时,将类中的属性私有化,即使…...
为什么选择海外服务器?
如何选择跨境电商服务器:详细指南 选择合适的服务器是跨境电商企业成功的基础。服务器的性能和稳定性直接影响着网站的访问速度、用户体验和安全性,进而影响着企业的销量和利润。那么,跨境电商企业该如何选择服务器呢? 1. 确定目…...
k8s+springcloud+nacos部署配置
1 k8s 部署nacos-2.1.2配置k8s-nacos-statefulSet.yaml文件 apiVersion: v1 kind: Service metadata:name: nacos-headlessnamespace: rz-dtlabels:app: nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec:# 3个端口打开&…...
梯度提升决策树(GBDT)
GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代的决策树算法,又叫 MART(Multiple Additive Regression Tree),它通过构造一组弱的学习器(树&am…...
数据结构之B树的原理与业务场景
B树是一种自平衡的树形数据结构,它能够保持数据有序,并且可以高效地进行查找、顺序访问、插入和删除操作。B树的设计是为了优化磁盘I/O操作,因为它可以减少磁盘访问次数,这在数据库和文件系统中非常有用。 1. B树的原理 节点的出…...
【Android面试八股文】你能说一说线程池管理线程的原理吗?
面试官(Interviewer): 欢迎参加面试,今天我们会讨论一些关于 Java 线程池管理的问题。你能给我解释一下 ThreadPoolExecutor 是如何管理线程的吗? 候选人(Candidate): 当然可以,ThreadPoolExecutor 是 Java 中用于创建和管理线程池的核心类。它通过一组核心参数来控制线…...
springer 在线投稿编译踩坑
springer投稿,在线编译踩坑总结 注意: 有的期刊需要双栏,而预定义的模板中可能为单栏,需要增加iicol选项。 例如: \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…...
固态硬盘的指标
固态硬盘的指标主要包括以下几个方面: 接口类型:这是固态硬盘与外部设备连接的方式,常见的接口类型有SATA、PCIe和NVMe等。不同的接口类型决定了固态硬盘的传输速度和性能。例如,PCIe接口的固态硬盘通常比SATA接口的固态硬盘具有…...
mysql 分组后每个取最新的一条记录
在MySQL中,若要从一个分组中获取每组的最新一条记录(通常基于时间戳或其他递增的列),可以使用子查询或者窗口函数(如果MySQL版本支持)。 以下是两种不同的实现方法: 方法1: 使用子查询和LIMIT…...
Java语法和基本结构介绍
Java语法和基本结构是Java编程的基础,它决定了Java代码的书写方式和程序的结构。以下是Java语法和基本结构的一些关键点: 1.标识符和关键字:Java中的标识符是用来标识变量、函数、类或其他用户自定义元素的名称。关键字是预留的标识符&#x…...
TDengine 3.3.0.0 引入图形化管理工具、复合主键等 13 项关键更新
在涛思数据研发团队的努力下,TDengine 3.3.0.0 版本终于和大家见面了。这一版本中,我们引入了多项革新功能和性能优化,力求在为用户提供极致体验的同时,不断推动技术的前沿。 此次更新不仅针对开源社区版本,进行了一系…...
C++基础之红黑树
二叉搜索树 二叉搜索树(Binary Search Tree,BST)是一种二叉树,具有以下性质: 左子树节点值小于根节点值:对于树中的每个节点 x,其左子树中所有节点的值都小于 x 的值。右子树节点值大于根节点值…...
ClickHouse数据库对比、适用场景与入门指南
本文全面对比了ClickHouse与其他数据库(如StarRocks、HBase、MySQL、Hive、Elasticsearch等)的性能、功能、适用场景,并提供了ClickHouse的教学入门指南,旨在帮助读者选择合适的数据库产品并快速掌握ClickHouse的使用。 文章目录 …...
举例说明 如何通过SparkUI和日志定位任务莫名失败?
有一个Task OOM: 通过概览信息,发现Stage 10的Task 36失败了4次导致Job失败。概览信息中显示最后一次失败的退出代码(exit code)是143,意味着发生了内存溢出(OOM,即Out of Memory)。…...
Vue前端通过Axios的post方式传输数据,后端为什么一直接收的值是null?
沃靠!这个细节太细了,搞了我两个多小时才找到这个bug。 一、 首先官方文档给我的post请求的例子是这样的: axios.post(/user, {firstName: Fred,lastName: Flintstone}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);})…...
外链建设如何进行?
理解dofollow和nofollow链接,所谓dofollow链接,就是可以传递权重到你的网站的链接,这种链接对你的网站排名非常有帮助,这种链接可以推动你的网站在搜索结果中的位置向上爬,但一个网站全是这种有用的链接,反…...
深入理解Java正则表达式及其应用
正则表达式是一种强大的文本匹配和处理工具,可以在字符串中查找、替换、提取符合特定模式的内容。Java作为一种广泛应用的编程语言,提供了丰富的正则表达式支持。本文将深入探讨Java正则表达式的基本概念、语法以及常见应用场景,帮助读者全面…...
Gstreamer学习3----灌数据给管线之appsrc
参考资料 Basic tutorial 8: Short-cutting the pipeline gstreamer向appsrc发送帧画面的代码_gst appsrc可变帧率-CSDN博客 在官网教程Basic tutorial 8: Short-cutting the pipeline 里面,讲了一个例子,push音频数据给管线,视频的例子更…...
【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想
关注我的朋友们可能知道,我经常在信号处理的领域出没,时不时会发一些信号处理、深度学习科普向的文章。 不过算法研究久了,总想做一些更有趣的事情。 比如用深度学习算法赚大钱。。毕竟有什么事情能比暴富更有意思呢。 一、神经网络与彩票…...
【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用
概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法,它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特,强大,而且使用更为方便,目前检测少,强烈推荐!!&a…...
c++_0基础_讲解7 练习
这一讲我为大家准备了几道题目,大家试着独自做一下(可能来自不同网站) 整数大小比较 - 洛谷 题目描述 输入两个整数,比较它们的大小。若 x>yx>y ,输出 > ;若 xyxy ,输出 ÿ…...
docker一些常用命令以及镜像构建完后部署到K8s上
docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件(tar格式)7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…...
免费网站建设市场/怎么做推广让别人主动加我
计算机二级access题库答案在文末1.在Access数据库中,一个关系就是一个【 A】。A)二维表 B)记录C)字段 D)数据库 综合数据2. 设有部门和员工两个实体,每个员工只能属于一个部门,一个部门可以有多名员工,则部门与…...
检测网站建设/国外搜索引擎排行榜
试验网站#1搜索引擎优化收录情况记录(断续运行)日期Yahoogooglebaidusogou每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量2007-6-24288 333 1060 4813 2007-6-25164013523330108020481302007-6-26空间超过6月流量限制……,…...
乐清企业网站建设/谷歌排名查询
往期精选● 架构师高并发高性能分布式教程(4000G)● 39阶段精品云计算大数据实战视频教程● 互联网技术干货视频教程大全【菜单为准】● 2017年8月最新Intellij IDEA全套视频教程● 程序员如何制作高质量的简历【视频简历】● 两套大型电商实战项目 ● 200本经典编程相关…...
自己做的网站如何让别的网可以查看/温州seo优化
没怎么用过这个新特性。事实上也不算新啦,试试吧,如今静态类的继承非常方便了 <?php class A {protected static $def 123456;public static function test() {echo get_class(new static);}public static function test2() {echo static::$def;} }…...
鸡西市建设局网站/营销的方法和技巧
1.基本的读取配置文件-read(filename) 直接读取ini文件内容-sections() 得到所有的section,并以列表的形式返回-options(section) 得到该section的所有option-items(section) 得到该section的所有键值对-get(section,option) 得到section中option的值,返…...
分析网络营销的特点/沈阳seo优化排名公司
ppt转pdf一般人都会去网上搜,今天我想把ppt转pdf,一搜百度就是一堆软件跟广告,看着就™恶心。 今天我找到了ppt转pdf的方法,以后不用去在苦恼这个事情了,希望能帮到你鸭。 打开需要转换的ppt点击文件 点击导出 点击创…...