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

Web后端开发登录校验及JWT令牌,过滤器,拦截器详解

如果用户名正确则成功进入

登录功能

代码

Controller

Service

Mapper

结果

若登录成功结果如下: 

如果登录失败,结果如下

登录校验

为什么需要登录校验

 有时再未登录情况下,  我们也可以直接访问部门管理, 员工管理等功能

因此我们需要一个登录校验操作,  只有确认用户登录的过程中才可以访问上述功能

若发现没有登录, 则不允许访问上述功能, 直接给前端响应一个错误的结果, 最终跳转到登录页面  

浏览器与服务交互使用的协议http是一个无状态协议, 即下一次请求不会携带上一次请求的数据

如图,  先后访问login, emps操作的两次请求是独立的, 所以正常来讲无法判断员工是否登录

所以我们可以在员工登录成功之后存储一个登录标记

这样我们就可以在每个接口前面做一个条件判断, 若有这个标记就正常执行

没有登录就返回错误信息即可

为了简化在所以接口前面都做判断,  可以提供一个统一拦截,来拦截浏览器发送过来的所有请求,进而通过请求校验员工是否登录

校验方式就是获取之前存储的登录标记, 如果存在这个标记说明已经登录了,直接放行(红色粗箭头)

没获取到就返回给前端错误信息, 跳转登录界面

会话技术

1.

多次体现在登录一次建立连接后可以访问不同接口

当三个浏览与服务器同时建立会话, 则存在三个会话

2.

而因为Http协议的每次请求都是独立的, 所以同一会话中的多次请求是无法进行数据共享的, 想解决这个问题就要使用会话跟踪技术的

3. 

4. 会话跟踪方案对比

 浏览器首次请求, 服务器会自动在响应中加入一个cookie, 浏览器自动存储这个cookie, 下次发送请求还会自动带上这个cookie, 统一拦截时若请求中带有cookie说明已经登录过了

跨域:

浏览器首次请求后, 服务器查看请求内部是否有session,

如果有则会检查session是否有效,

如果没有则会建立一个session   

注意: 某马这里讲得不对, session的底层不是基于cookie的, 两者没有相关

Session存储在服务端, SessionId 存储在浏览器这边,  所以并不会暴露

JWT令牌

不是必须存储在cookie中, 也就是不必须存储在PC端,  也可以存储在移动端

令牌存储在客户端不怕伪造, 因为在统一拦截时会检测会检测令牌是否有效

组成

第一 二 部分是由Base64生成  第三部分是由结合(密钥,一,二部分) 由签名算法生成来 

使用场景:


JWT-生成

1, 首先引入依赖

2. 使用Jwts 工具类,

3. 生成如下

解析JWT

 

 

拦截技术

过滤器Filter

Filter快速入门

1. 定义Filter: 定义一个类, 实现Filter接口, 并重写其所有方法

2. 配置Filter: Filter类上加 @WebFilter 注解(标识当前是一个过滤器组件), 配置拦截资源的路径(图中表示所有路径). 并在引导类上加入@ServletComponentScan 开启 Servlet组件支持

Filter执行流程

过滤器链

登录校验Filter- 流程

拦截器Interceptor

拦截器快速入门:

1. 定义拦截器, 实现HandlerInterceptor接口, 并重写其所有方法

2. 注册拦截器

@Configuration 表示这是个配置类 
@Autowired 注入LoginCheckInterceptor 对象

拦截器详解

拦截器可以根据需求, 配置不同的拦截路径

拦截器-执行流程

Tomcat不识别controller程序, 因为他是一个Servlet容器

所以Spring 提供了  DispatcherServlet  前端控制器,   

用来把请求转给Controller

过滤器和拦截器区别

登录校验Interceptor

相关文章:

Web后端开发登录校验及JWT令牌,过滤器,拦截器详解

如果用户名正确则成功进入 登录功能 代码 Controller Service Mapper 结果 若登录成功结果如下: 如果登录失败,结果如下 登录校验 为什么需要登录校验 有时再未登录情况下, 我们也可以直接访问部门管理, 员工管理等功能 因此我们需要一个登录校验操作, 只有确认用户登录…...

大语言模型迎来重大突破!找到解释神经网络行为方法

前不久,获得亚马逊40亿美元投资的ChatGPT主要竞争对手Anthropic在官网公布了一篇名为《朝向单义性:通过词典学习分解语言模型》的论文,公布了解释经网络行为的方法。 由于神经网络是基于海量数据训练而成,其开发的AI模型可以生成…...

zabbix内置宏、自动发现与注册

一、zabbix内置宏 1、概念: 在Zabbix中,内置宏是一种特殊的变量,通常用在 Trigger 名称和表达式中,引用有关监控对象的信息。 2、种类: {HOST.NAME} 主机名 {HOST.IP} 主机 IP 地址 {TRIGGER.DESCRIPTION} 触…...

Oracle与Mysql语法区别

database 一、数据类型二、update..select语句三、upsert语句四、常见函数五、自动更新列时间戳一、数据类型 OracleMysqlnumberint/decimal变长字符:varchar2varchardatedatetime/timestampinttinyint/smallint/mediumint/int/bigint二、update…select语句 Oracle update t…...

Jetpack:008-Icon与Image

文章目录 1. 概念介绍2. 使用方法2.1 Icon2.2 Image 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中与Button相关的内容,本章回中主要I con与Image。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍 我们在本章回中介绍…...

参数解析(牛客)

目录 一、题目 二、代码 一、题目 二、代码 #include <iostream> #include <vector> using namespace std;int main() {string s;getline(cin, s);int i 0;vector<string>ret;while (i < s.size()){if (s[i] )//遇到空格直接跳过{i;}else if (s[i] …...

Linux网络编程系列之服务器编程——阻塞IO模型

Linux网络编程系列 &#xff08;够吃&#xff0c;管饱&#xff09; 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…...

排序算法-基数排序法(RadixSort)

排序算法-基数排序法&#xff08;RadixSort&#xff09; 1、说明 基数排序法与我们之前讨论的排序法不太一样&#xff0c;并不需要进行元素之间的比较操作&#xff0c;而是属于一种分配模式排序方式。 基数排序法比较的方向可分为最高位优先&#xff08;Most Significant Di…...

nginx绑定tomcat与tomcat联合使用的配置(nginx反向代理tomcat的配置说明)

nginx反向代理tomcat通信配置 &#xff08;内容来自网上&#xff0c;注解部分才是原创&#xff09; 切记&#xff1a; url的意思就是 unifed resource location 统一资源定位 其中location就是定位的意思 所以上文中的location就有 对应匹配的 url 标识的资源的相关配置之…...

【Java】nextInt()后面紧接nextLine()读取不到数据/InputMismatchException异常的解决方案

错误如下&#xff1a; 有时候还会抛出InputMismatchException异常 看&#xff01;我只输入了一个5&#xff0c;并没有给str赋值&#xff0c;它就已经将结果打印出来了&#xff01;这就意味着&#xff0c;str是读取到了数据的&#xff0c;只不过这个数据并不是我们想要的输入的…...

【传输层协议】UDP/TCP结构特点与原理(详解)

文章目录 1. UDP1.1 UDP结构1.2 UDP特点1. 无连接2. 不可靠3. 面向数据报4. 缓冲区5. 大小受限6. 无序性 2. TCP2.1 TCP结构2.2 TCP特点1. 有连接2. 可靠性3. 面向字节流4. 拥塞控制5. 头部开销 2.3 TCP原理1. 确认应答&#xff08;安全机制&#xff09;2. 超时重传&#xff08…...

哪种网站适合物理服务器

哪种网站适合物理服务器 看到独立服务器这一词语&#xff0c;相信大家脑海立马就浮现出了它的种种优势&#xff0c;但是有优势就伴随着也有一定的弊端&#xff0c;比如说它的空间大、特殊的的组件配置&#xff0c;权限配置等&#xff0c;但是成本却非常的高&#xff0c;那么我…...

uni-app集成使用SQLite

一、打开uni-app中SQLite 二、封装sqlite.js module.exports {dbName: chat, // 数据库名称dbPath: _doc/chat.db, // 数据库地址,推荐以下划线为开头 _doc/xxx.db/*** Description: 创建数据库 或 有该数据库就打开* author: ZXL* createTime: 2023-10-12 09:23:10* Copyr…...

Qt不能安装自己想要的版本,如Qt 5.15.2

使用在线安装工具安装Qt5.15.2时&#xff0c;发现没有Qt 5的相关版本&#xff0c;只有Qt 6的版本&#xff0c;这时选择右边的Archive&#xff0c;再点击筛选&#xff0c;这时就会出现之前的Qt版本。...

学信息系统项目管理师第4版系列28_组织级项目管理和量化项目管理

1. OPM 1.1. 旨在确保组织开展正确项目并合适地分配关键资源 1.1.1. 有助于确保组织的各个层级都了解组织的战略愿景、实现愿景的措施、组织目标以及可交付成果 1.2. 业务评估是建立OPM框架的必要组件 1.3. OPM3 是组织级项目管理成熟度模型&#xff0c;可用于评估组织项目…...

Bean实例化的三级缓存

在Spring框架中&#xff0c;Bean实例化的三级缓存&#xff08;三级缓存也称为三级缓存机制&#xff09;是用于缓存Bean定义的一种机制&#xff0c;用于管理和加速Spring容器中Bean的创建和初始化过程。三级缓存包括了singletonObjects、earlySingletonObjects 和 singletonFact…...

Jenkins+Gitlab+Docker(Dockerfile)部署

Docker部署运行 ​ 上一篇内容中使用Jenkins(运行服务器)Gitlab(代码存储库)Webhook(网络钩子)的方式部署运行我们的项目。需要我们在服务器上做好很多相关的环境配置及依赖。 ​ 那么假如有这样一个场景&#xff1a;需要把不同技术栈的项目部署到同一台服务器上运行。比如PH…...

Web前端-Vue2+Vue3基础入门到实战项目-Day4(组件的三大组成部分, 组件通信, 案例-组件版小黑记事本, 进阶语法)

Web前端-Vue2Vue3基础入门到实战项目-Day4 组件的三大组成部分(结构/样式/逻辑)scoped样式冲突data是一个函数 组件通信组件通信语法父传子子传父props详解什么是propsprops检验props与data的区别 非父子(扩展)事件总线 (event bus)provide - inject 案例 - 小黑记事本(组件版)…...

【大模型应用开发教程】01_大模型简介

C1 大模型简介 一. 什么是LLM&#xff08;大语言模型&#xff09;&#xff1f;1. 发展历程2. 大语言模型的概念LLM的应用和影响 二、大模型的能力和特点1. 大模型的能力1.1 涌现能力&#xff08;emergent abilities&#xff09;1.2 作为基座模型支持多元应用的能力1.3 支持对话…...

Flume 简介及基本使用

1.Flume简介 Apache Flume 是一个分布式&#xff0c;高可用的数据收集系统。它可以从不同的数据源收集数据&#xff0c;经过聚合后发送到存储系统中&#xff0c;通常用于日志数据的收集。Flume 分为 NG 和 OG (1.0 之前) 两个版本&#xff0c;NG 在 OG 的基础上进行了完全的重构…...

IPXWrapper终极指南:5分钟让经典游戏在现代电脑上联机重生

IPXWrapper终极指南&#xff1a;5分钟让经典游戏在现代电脑上联机重生 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 你是否怀念那些经典老游戏的局域网对战乐趣&#xff1f;《红色警戒2》、《暗黑破坏神》、《星际争霸》这些承…...

CodeCombat游戏化编程学习指南:5步从零基础到代码高手

CodeCombat游戏化编程学习指南&#xff1a;5步从零基础到代码高手 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat CodeCombat是一款革命性的游戏化编程学习平台&#xff0c;它将枯燥的代码学习转…...

Jetson Nano新手避坑:用Python RPi.GPIO控制LED和按键的完整流程(附代码)

Jetson Nano硬件编程实战&#xff1a;从LED控制到按键检测的避坑指南 第一次拿到Jetson Nano开发板时&#xff0c;很多从树莓派转过来的开发者会下意识地认为GPIO操作应该和Raspberry Pi完全一致。但当我尝试用熟悉的RPi.GPIO库控制板载LED时&#xff0c;却遇到了一系列意想不到…...

终极指南:如何使用Klib的kseq.h高效处理FASTA/FASTQ格式数据

终极指南&#xff1a;如何使用Klib的kseq.h高效处理FASTA/FASTQ格式数据 【免费下载链接】klib A standalone and lightweight C library 项目地址: https://gitcode.com/gh_mirrors/kl/klib Klib是一个轻量级独立C库&#xff0c;其中的kseq.h模块为生物信息学数据处理提…...

终极小米社区自动化任务指南:免费解放双手的完整教程

终极小米社区自动化任务指南&#xff1a;免费解放双手的完整教程 【免费下载链接】miui-auto-tasks 一个自动化完成小米社区任务的脚本 项目地址: https://gitcode.com/gh_mirrors/mi/miui-auto-tasks 小米社区自动化任务工具是一款专为米粉设计的智能脚本&#xff0c;能…...

保姆级教程:用ESP32-CAM和Blinker App,5分钟搭建你的第一个无线监控(附常见上传失败解决方案)

零基础玩转ESP32-CAM&#xff1a;从开箱到手机监控的完整避坑指南 第一次拿到ESP32-CAM这个小玩意儿时&#xff0c;我盯着它看了半天——这真的能变成监控摄像头&#xff1f;作为一个连电阻电容都分不清的纯小白&#xff0c;我花了整整三天时间才让手机成功显示出画面。现在回想…...

【生产环境紧急响应】:Docker镜像运行时异常的7种高危信号与秒级诊断流程

第一章&#xff1a;Docker镜像运行时异常的紧急响应概览当Docker容器在生产环境中突然退出、卡死或返回非预期状态码时&#xff0c;快速定位根本原因并恢复服务是SRE与运维工程师的核心能力。本章聚焦于镜像运行时异常&#xff08;如启动失败、崩溃重启、健康检查失败等&#x…...

CesiumJS

CesiumJS 是三维地图 / 地球可视化的核心库 https://cesium.com/downloads/ https://download.csdn.net/download/spencer_tseng/92823297...

终极Windows激活指南:KMS_VL_ALL_AIO智能激活脚本完全解析

终极Windows激活指南&#xff1a;KMS_VL_ALL_AIO智能激活脚本完全解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在Windows系统管理和批量部署领域&#xff0c;系统激活一直是技术人员面临…...

终极Windows音频路由指南:用Audio Router实现多设备音频分发

终极Windows音频路由指南&#xff1a;用Audio Router实现多设备音频分发 【免费下载链接】audio-router Routes audio from programs to different audio devices. 项目地址: https://gitcode.com/gh_mirrors/au/audio-router 你是否曾为Windows系统的音频管理而烦恼&am…...