[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.mfbz.cn/a/584741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【redis】初始redis和分布式系统的基本知识

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

iOS ------ Method Swizzling (动态方法交换)

一,Method Swizzling 简介 Method(方法)对应的是objc_method结构体;而objc_method结构体中包含了SEL method_name(方法名),IMP method_imp(方法实现) // objc_method 结构体 typed…

Hadoop概述

大数据处理技术 对大数据技术的基本概念进行简单介绍,包括分布式计算、服务器集群和 Google 的 3 个大数据技术。 分布式计算 对于如何处理大数据,计算机科学界有两大方向。 第一个方向是集中式计算,就是通过不断增加处理器的数量来增强单…

开源项目介绍-01:AAMED-master 圆和椭圆检测

前言: AAMED: Arc Adjacency Matrix based Fast Ellipse Detection :基于弧邻接矩阵的快速椭圆检测 1 下载 GitHub - Li-Zhaoxi/AAMED: Arc Adjacency Matrix based Fast Ellipse Detection 开源项目,支持windows 和 Linux的,然后,有C++,Python,Matlab的几个版本。 Git…

SQL底层执行过程

MySQL 的查询流程 客户端请求连接器 负责与客户端的通信,是半双工模式(半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。),验证请求用户的账户和密码是否正确,③如果用户的账户和密码验…

模型量化与量化在LLM中的应用 | 得物技术

一、模型推理优化 随着模型在各种场景中的落地实践,模型的推理加速早已成为AI工程化的重要内容。而近年基于Transformer架构的大模型继而成为主流,在各项任务中取得SoTA成绩,它们在训练和推理中的昂贵成本使得其在合理的成本下的部署实践显得…

Git 如何修改已经推送的错误提交信息(有图有真相)

解决方案一:修改最新的提交信息 首先,我们来考虑最简单的情况:如果你在最近一次提交时输入了错误的提交信息,并且还没有进行下一次提交,那么你可以使用如下命令来修改最新的提交信息: $ git commit --ame…

VSCode SSH连接远程主机失败,显示Server status check failed - waiting and retrying

vscode ssh连接远程主机突然连接不上了,终端中显示:Server status check failed - waiting and retrying 但是我用Xshell都可以连接成功,所以不是远程主机的问题,问题出在本地vscode; 现象一: 不停地输入…

CPU架构

一、CPU组成 CPU内部由ALU(算术逻辑单元)、CU(控制器)、寄存器(PC、IR、PSW、DR、通用寄存器等)、中断系统组成,外部通过总线与控制总线、数据总线、地址总线进行相连,对数据和程序…

【保姆级讲解如何安装与配置Xcode】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

第十二章 案例二:配置Trunk,实现相同VLAN的跨交换机通信

1、实验环境 公司的员工人数已达到 100 人,其网络设备如图12.13所示,现在的网络环境导致广播较多网速慢,并且也不安全,公司希望按照部门划分网络,并且能够保证一定的网络安全性 图12.13 实验案例二拓扑图 其网络规划…

环境安装:python环境迁移(无网和有网)

前言 环境部署或迁移是一项简单而又考验应对能力的一项工作,需要考虑到网络环境的情况,无网环境下需要采取离线方式进行操作,有网环境则可以直接通过在线安装完成。 在进行Python环境迁移时,需要注意保持环境的一致性,…

Notion是什么,Notion软件下载,Notion官方网站在哪里?国内用户Notion怎么订阅升级会员?

Notion是什么 Notion,一款强大的多功能工具,可用于组织笔记、任务、项目、数据库和文档等。 Notion软件下载 这个到Notion官方网站下载就可以了。 怎么订阅Notion会员 注册好了Notion的账号,来到首页,点击设置,左边…

LED显示屏黑屏的常见原因及解决办法

LED显示屏在使用过程中偶尔会出现黑屏现象,可能由多种原因引起。以下是LED显示屏出现黑屏的主要情况及相应的解决办法: 1. 上电的瞬间就是黑的 原因:可能是因为上电过程中出现了一些异常情况,导致屏幕无法正常显示。 解决办法&…

如何保证Redis双写一致性?

目录 数据不一致问题 数据库和缓存不一致解决方案 1. 先更新缓存,再更新数据 该方案数据不一致的原因 2. 先更新数据库,再更新缓存 3. 先删除缓存,再更新数据库 延时双删 4. 先更新数据库,再删除缓存 该方案数据不一致的…

新手如何用Postman做接口自动化测试?

1、什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来,本质是用代码去测试另一段代码,属于一种软件开发工作,已…

洗地机哪个牌子质量最好?四款年度口碑品牌盘点

在当今家庭生活中,洗地机技术的飞速发展给我们的日常带来了极大的便利。洗地机作为智能家居领域的佼佼者,其实用性和智能化程度受到越来越多消费者的欢迎。许多人在选洗地机时会纠结一个问题:洗地机哪个牌子质量最好? 洗地机怎么…

# 谷歌 Chrome 浏览器无法安装插件的解决方法

谷歌 Chrome 浏览器无法安装插件的解决方法 运用开发模式安装 安装步骤: 1、 将 XX.crx 插件的扩展名改成 .zip 或者 .rar 并解压到文件夹 XX 目录。 1)如:下载的 前端框架 vue.js 插件 nhdogjmejiglipccpnnnanhbledajbpd-6.6.1-Crx4Chro…

【AGX】Ubuntu20.04 + ROS_ noetic+ 大疆Mid360激光 雷达评测

大家好,我是虎哥,最近组装机器人,使用到了大疆孵化的圳市览沃科技有限公司(简称Livox览沃科技)推出的觅道系列全新混合固态激光雷达Mid-360,顺便试试效果,也记录一下使用入门过程。 "觅道M…

自然语言处理 (NLP) 和文本分析

自然语言处理 (NLP) 和文本分析:NLP 在很多领域都有着广泛的应用,如智能助手、语言翻译、舆情分析等。热门问题包括情感分析、命名实体识别、文本生成等。 让我们一起来详细举例子的分析讲解一下自然语言处理(NLP)和文本分析的应用…
最新文章