[SpringBoot] JWT令牌——登录校验

JWT(JSON Web Token)是一种用于在网络应用之间传递信息的开放标准(RFC 7519)。它由三部分组成:头部(header)、载荷(payload)和签名(signature)。JWT令牌通常用于在用户和服务器之间进行身份验证和授权。

JWT令牌的工作流程如下:

  1. 用户通过用户名和密码进行登录操作,服务器验证用户身份后(即登录成功)会生成一个JWT令牌。
  2. 服务器将JWT令牌返回给用户,用户将其存储在本地。
  3. 用户在后续的任何请求中都会将JWT令牌发送给服务器。
  4. 服务器验证JWT令牌的签名和有效期,并根据载荷中的信息进行相应的操作。

JWT令牌的优点包括:

  • 简单轻量:JWT令牌是基于JSON格式的,易于传输和解析。
  • 安全性:JWT令牌使用签名进行验证,可以防止篡改和伪造。
  • 无状态性:JWT令牌包含了所有必要的信息,服务器无需保存用户的会话状态

1.添加令牌依赖

要想使用JWT令牌,需要在pom.xml 文件中添加对应的依赖

2.定义令牌生成和解析方法

如果用户进行登录操作,登录成功后,服务器会调用令牌生成方法,给用户生成一个令牌,然后将令牌返回给用户端,用户端就会把令牌存储到本地,之后用户发送任何请求都会在请求体中携带令牌。而用户发起的任何请求都会被服务器的过滤器所拦截,在过滤器中校验令牌的真假,如果令牌正确,则放行用户的请求,如果令牌错误,则返回给用户端提示信息

2.1 定义令牌工具类

生成一个 JWT令牌需要设置令牌的加密算法、密钥、有效时期,也可以在令牌中添加一些自定义的内容,而自定义的内容会被添加到令牌的载荷(payload)部分里

所以我们定义两个静态变量。第一个变量设置密钥,第一个变量设置有效时期

2.2 定义令牌生成方法

定义一个方法用来生成令牌,我们自定义的内容可以通过参数传递到方法中,然后在方法中设置令牌所需要的东西,最后该方法返回一个字符串的 JWT令牌

2.3定义令牌解析方法

令牌解析是用于校验令牌的真假性。在用户进行任何操作之前,会先验证令牌的真假,只有令牌为真,才能继续操作

校验令牌需要我们把之前生成的令牌作为参数传进去,还需要设置生成令牌时所用的密钥,最后该方法返回的是令牌的载荷(payload)部分,所就是我们自定义的内容

3.在登录功能中调用令牌生成方法

只有用户登录成功后,才会生成令牌,如果用户登录失败,则会提示失败信息

当服务端接收到登录请求后,先获取用户登录时所输入的账号和密码,封装到用户实体类中。然后调用业务层中的方法,查询该账号密码是否在数据库中存在,如果存在则证明用户输入的账号密码正确

然后可以定义一个集合,将用户的信息添加到集合里面

然后调用令牌生成方法,将集合作为参数传进去,最终集合里的信息会被添加到令牌的载荷(payload)部分里面

最后将令牌添加到返回体中,返回给用户端一个成功的JSON 数据。如果登录失败,则最后返回给用户端一个失败的JSON 数据

4.定义过滤器

服务器给用户生成令牌之后,往后用户所有的请求中都会在请求体中携带令牌。而用户发起的请求都会被过滤器所拦截,在过滤器中校验令牌的真假和令牌的有效期,如果通过校验,则放行用户的请求

定义一个过滤器,实现 Filter 接口,并在注解上添加拦截所有路径请求,重新 Filter 接口里的一个放行方法

然后还需要在启动类上添加一个注解

@ServletComponentScan

用于扫描我们定义的过滤器类

5.定义令牌校验条件

在过滤器中,定义一些令牌的校验条件,如果条件全都满足,则校验通过,放行用户的请求。如果校验失败,则返回失败的响应体

5.1 转换数据类型

先把请求和响应分别转换成

HttpServletRequest 类型
HttpServletResponse 类型

2.获取请求的url

判断 url 中是否包含 login 路径,如果包含,则证明该请求是用户登录请求,因为在登录之前还没有生成令牌,所有直接放行

3.获取请求头中的令牌

如果令牌为空,则返回给用户端错误的 JSON 数据

如果令牌不为空,则校验令牌的正确性,需要调用令牌工具类中解析令牌的方法,如果解析失败,则抛异常,返回给用户端错误的 JSON 数据

如果解析正确,则放行

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

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

相关文章

Mybatis-plus 字段结果为NULL

问题 Mybatis-plus 字段结果为NULL 详细问题 笔者使用SpringBootMybatis-plus 进行项目开发。进行接口请求测试,在确定SQL语句没有问题的前提下,返回记录部分字段(譬如字段name)为空。 解决方案 修改Mybatis-plus中mapper的xml文件,使re…

JavaEE初阶——多线程(七)——定时器

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享多线程的第七篇文章——关于定时器 如果有不足的或者错误的请您指出! 目录 4.定时器4.1标准库提供的定时器4.2自己实现一个定时器4.2.1任务类4.2.2Timer类4.2.3 有一个线程来负…

如何解决IntelliJ IDEA 2024打开项目时频繁闪退问题

🐯 如何解决IntelliJ IDEA 2024打开项目时频繁闪退问题 🐾 文章目录 🐯 如何解决IntelliJ IDEA 2024打开项目时频繁闪退问题 🐾摘要引言正文📘 识别问题📙 内存配置调整步骤1: 定位vmoptions文件步骤2: 修改…

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换&#xff1a; HTML&#xff1a; <!--底部导航--> <ul class"milliaNav"> <li class"active"><a href"#"> <svg class"icon" viewBox"0 0 1024 1024&qu…

1分钟掌握 Python 函数参数

任何编程语言函数都是非常重要的一部分&#xff0c;而在进行函数调用时&#xff0c;了解函数的参数传递方式是非常有必要的。Python中支持哪些传参方式呢&#xff1f; Python中的传参方式是比较灵活的&#xff0c;主要包括以下六种&#xff1a; 按照位置传参按照关键字传参默…

力扣--N皇后

题目: 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。…

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日&#xff0c;百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出&#xff1a;“基本上说以后其实不会存在“程序员”这种职业了&#xff0c;因为只要会说话&#xff0c;人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种&#xff0c;一种…

Java进阶-异常处理

概述 常见运行时异常 直接继承自RuntimeException或者子类&#xff0c;编译阶段不会报错&#xff0c;运行时可能出现的错误 运行时异常&#xff1a;一般是程序员业务没有考虑好或者是编程逻辑不严谨引起的程序错误 数组索引越界异常空指针异常类型转换异常数学操作异常数字转…

离线语音模块初步学习——LSYT201B(深圳雷龙发展)

一 、产品简介 首先简单介绍下该离线语音模块&#xff0c;官方给出的介绍是&#xff1a;YT2228 是根据智能语音交互市场需求及思必驰算法的发展方向定义开发的 “芯片算法”人工智能人机语音交互解决方案&#xff0c;具有高性能、低功耗等特点。该芯片通过软硬融合的方法&…

数据丢失的谜团:文件突然不见了,却还占用着空间

在数字化时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;有时我们会遇到一个令人困惑的问题&#xff1a;明明存储在设备中的文件突然不见了&#xff0c;但磁盘空间仍被占用。这种情况究竟是怎么回事&#xff1f;我们又该如何找回这些“消失”的文件呢&#xff1f;接下…

ROS python实现乌龟跟随

产生两只乌龟&#xff0c;中间的乌龟(A) 和 左下乌龟(B), B 会自动运行至A的位置&#xff0c;并且键盘控制时&#xff0c;只是控制 A 的运动&#xff0c;但是 B 可以跟随 A 运行 乌龟跟随实现的核心&#xff0c;是乌龟A和B都要发布相对世界坐标系的坐标信息&#xff0c;然后&am…

力扣HOT100 - 994. 腐烂的橘子

解题思路&#xff1a; 因为要记录轮数&#xff08;分钟数&#xff09;&#xff0c;所以不能一口气遍历到底&#xff0c;所以不能用深搜&#xff08;bfs&#xff09;&#xff0c;而要用广搜&#xff08;bfs&#xff0c;层序遍历&#xff09;。 先记录下新鲜橘子数&#xff0c;…

理解控制反转

好久之前写的学习笔记&#xff0c;一直落在草稿箱里今天才发现&#xff0c;既然写了就补发出来吧~ 当需要实现不同操作时&#xff0c;用户和程序员都无需修改&#xff0c;只需要修改xml配置即可。 代码体现&#xff1a; 不同接口的实现类&#xff1a; xml具体配置 通过set注入…

GO语言写Prometheus自定义node-exporter的Docker容器测试

1. 安装docker-compose 执行以下命令&#xff0c;安装docker-compose到CentOS7.9环境中&#xff1a; # 下载二进制文件 sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/d…

Qt : 在QTreeWidget中添加自定义右键菜单

一、引言 如图&#xff0c;我们需要在一个QTreeWidget 控件中添加了自定义右键菜单。 二、思路 如何做到的呢&#xff0c;很简单。浅浅记录和分享一下。 继承QTreeWidget&#xff0c;定义一个子类CustomTreeWidget &#xff0c;在重写contextMenuEvent 事件即可。 三、代…

linux调试-访问物理地址

1. devmem 方式 rootraspberrypi:/home/niyu# busybox devmem 0x7e215000 8 0xa rootraspberrypi:/home/niyu# busybox devmem 0x7e215000 8 0x0A rootraspberrypi:/home/niyu# busybox devmem 0x7e215000 8 0xb rootraspberrypi:/home/niyu# busybox devmem 0x7e21500…

如何制作个性又美观的二维码?自定义Logo、样式,还能一键复用

草料二维码提供基础的二维码美化设置&#xff0c;包含Logo、颜色、码点码眼、容错、添加文字等设置。 还提供150标签样式&#xff0c;标签样式中所有内容&#xff0c;包括LOGO、背景、字段数量等&#xff0c;均可修改。 同时&#xff0c;支持将样式保存到账号下&#xff0c;方…

从递归角度串联二叉树-图论-动态规划

一、深度理解二叉树的前中后序遍历 二叉树遍历框架如下&#xff1a; void traverse(TreeNode* root) {if (root nullptr) {return;}// 前序位置traverse(root->left);// 中序位置traverse(root->right);// 后序位置 }先不管所谓前中后序&#xff0c;单看 traverse 函数…

常见的工业路由器访问问题

A&#xff1a;工业路由器已经设置了pptp怎么访问路由下面的电脑 1. 确认PPTP VPN设置&#xff1a;首先&#xff0c;确保PPTP VPN服务器在工业路由器上已正确设置&#xff0c;并且处于活动状态。这包括确保VPN服务器的IP地址、端口、用户名和密码等设置正确无误。 2. 连接到VP…

硬件24、嘉立创EDA丝印的优化和调整

1、调整全部丝印的属性 先选中一个丝印&#xff0c;然后右键点击它&#xff0c;选择查找&#xff0c;然后选择查找全部 选择查找全部这个时候可以设置所有丝印在元件的位置了&#xff0c;布局-》属性位置&#xff0c;位号&#xff0c;属性位置设置为上边&#xff0c;这时丝印就…