【Java Web】012 -- SpringBootWeb综合案例(登录功能、登录校验、异常处理)

目录
一、登录功能
1、基础登录功能
①、SQL语句
②、接口参数
③、实现思路
④、实现步骤
2、联调Bug(没有Cookie或Session)
二、登录校验
1、登录校验的实现思路
2、会话技术
①、会话与会话跟踪
②、会话跟踪方案对比
Cookie
Session
令牌技术(主流方案)
3、JWT令牌
①、简介
②、应用场景
③、JWT - 生成
④、JWT - 校验
⑤、登录后下发令牌(用户成功登录的标记)
4、过滤器Filter
①、快速入门
②、详解(执行流程、拦截路径、过滤器链)
③、实现登录校验 - Filter
5、拦截器(Interceptor)
①、简介 & 快速入门
②、详解(拦截路径、执行流程)
③、实现登录校验 - Interceptor
三、异常处理
1、出现异常的不符合规范数据
①、示例
②、思考
③、全局异常处理器
④、小结
一、登录功能
1、基础登录功能
①、SQL语句
| SQL语句:
|
| 查询结果:
|
②、接口参数
| 基本信息: |
|
|
| 请求参数: |
|
|
| 响应数据: |
|
|
③、实现思路

④、实现步骤

具体实现:
| Ⅰ、Controller方法: |
|
|
| Ⅱ、Service方法: |
| service接口:
service实现类:
|
| Ⅲ、Mapper方法: |
|
|
| Ⅳ、Postman测试: |
|
|
2、联调Bug(没有Cookie或Session)
缺少登录校验:

二、登录校验

1、登录校验的实现思路
由于HTTP协议是无状态的,两次请求之间是独立的,所以它是无法判断用户是否登录成功的,我们可以通过 统一拦截 与 登录标记 的方式进行实现:

2、会话技术
①、会话与会话跟踪
浏览器与服务器之间的一次连接,我们就称为一次会话

②、会话跟踪方案对比
-
Cookie
| 方案一:Cookie(传统方案)
|
| 示例代码:
|
| 测试结果:(c1)
测试结果:(c2)
|
-
Session
| 方案二:Session (传统方案)
|
| 示例代码:
|
| 测试结果:(s1)
测试结果:(s2)
|
-
令牌技术(主流方案)
| 方案三:令牌技术(主流方案)
|
3、JWT令牌
①、简介

数字签名部分是根据前面的签名算法计算得来的,而不是Base64编码
②、应用场景

③、JWT - 生成

单元测试:
| Ⅰ、引入JWT令牌依赖: |
|
|
| Ⅱ、测试方法(生成JWT): |
|
签名算法分类:
|
④、JWT - 校验

示例:
| Ⅲ、测试方法(解析JWT令牌): |
|
解析结果:
如果生成的令牌被篡改了,程序将会直接报错:
|
⑤、登录后下发令牌(用户成功登录的标记)


实现思路:

操作步骤:
| Ⅰ、进入JWT工具类(JwtUtils.java): |
|
|
| Ⅱ、修改Controller业务方法: |
|
|
| Ⅲ、单元测试: |
|
令牌解析:
|
4、过滤器Filter


①、快速入门

示例:
| Ⅰ、定义Filter:定义一个类,实现Filter接口,并重写其所有方法; |
| Ⅱ、配置Filter:Filter类上加 @WebFilter注解,配置拦截资源的路径,引导类上加@ServletComponentScan开启Servlet组件支持: |
|
在引导类上加注解:
|
| Ⅲ、在doFilter方法中放行请求: |
|
|
小结:(由于Filter是Java Web的三大组件,而不是Spring的组件,所以,我们要想在Spring中使用Filter这个组件,要额外添加一个注解@ServletComponentScan)


②、详解(执行流程、拦截路径、过滤器链)
Filter执行流程:

| 示例: |
|
|
| 问题: |
|
|
Filter拦截路径:

| 示例:(只拦截login路径) |
|
|
过滤器链:

| 示例:(新增Filter1:AbcFilter) |
|
|
| Postman发送请求: |
|
|
小结:

③、实现登录校验 - Filter

| 思考:
|
| 流程:
|
| 代码实现: |
| Ⅰ、过滤器(LoginCheckFilter.java): |
|
|
| Ⅱ、测试: |
| 登录请求:(直接放行)
查询部门请求:(携带token):
|
5、拦截器(Interceptor)

①、简介 & 快速入门

快速入门:

示例:
| Ⅰ、定义拦截器(LoginCheckInterceptor.java),实现HandlerInterceptor接口,并重写其所有方法: |
|
|
| Ⅱ、注册拦截器(WebConfig.java 配置类): |
|
|
②、详解(拦截路径、执行流程)
拦截路径:(/*:一级路径,/**:任意级路径)

执行流程:

Filter 与 Interceptor 的区别:

③、实现登录校验 - Interceptor

主要是放行的形式不同,其它逻辑 Filter 和 Interceptor 都是一样的,两者我们选择一个使用就可以

三、异常处理
1、出现异常的不符合规范数据

①、示例
| 示例:(重复添加部门名称) dept.name 存在唯一约束:
返回的JSON数据:(不符合开发规范)
|
②、思考

解决方案:(全局异常处理器)

③、全局异常处理器

示例:
| Ⅰ、创建全局异常处理器(GlobalExceptionHandler.java): |
|
|
| Ⅱ、测试:(重复添加部门) |
|
全局异常处理器捕获:
前端解析:
|
④、小结

相关文章:
【Java Web】012 -- SpringBootWeb综合案例(登录功能、登录校验、异常处理)
目录 一、登录功能 1、基础登录功能 ①、SQL语句 ②、接口参数 ③、实现思路 ④、实现步骤 2、联调Bug(没有Cookie或Session) 二、登录校验 1、登录校验的实现思路 2、会话技术 ①、会话与会话跟踪 ②、会话跟踪方案对比 Cookie Session …...
跨界智能手表:比亚迪向左,小鹏向右
如今,电动化、智能化是汽车行业转型的大方向,而由于目前国内汽车产业在电动化方面已经算是“小有成效”,因此,抢占智能化高地,打造一个多设备互融的生态系统,就成为了车企的共同愿景。在此背景下࿰…...
【c++初阶】第九篇:vector(常用接口的使用 + 模拟实现)
文章目录vector介绍vector的使用vector的定义vector iterator(迭代器) 的使用begin和endrbegin和rendvector 空间增长问题size和capacityreserve和resize(重点)测试vector的默认扩容机制emptyvector的增删查改push_back和pop_backinsert和erasefindswapo…...
Taro React组件使用(6) —— RuiSendCode 短信验证码【倒计时】
1. 需求分析 获取验证码按钮,点击后进入倒计时环节;默认采用 120s 后才允许再次发送短信验证码;发送后不能再次点击发送按钮,点击也不执行发送逻辑;最好将发送短信的业务逻辑请求接口写在组件中,封装为公用组件,可以多处使用。2. 实现效果 2.1 验证码发送前 2.2 验证码…...
把ChatGPT接入我的个人网站
效果图 详细内容和使用说明可以查看我的个人网站文章 把ChatGPT接入我的个人网站 献给有外网服务器的小伙伴 如果你本人已经有一台外网的服务器,并且页拥有一个OpenAI API Key,那么下面就可以参照我的教程来搭建一个自己的ChatGPT。 需要的环境 Cento…...
关于数字游民是未来年轻人工作趋势的一种思考
Q:我觉得未来,数字游民会是中国工作的一种主流方式,因为实体行业受到严重冲击,科技的发展是推导支持这样的远程工作形式,而且未来人的时间是越来越离散化、碎片化、原子化的,以订单交付的形式,P2P的形式会是…...
2022年 合肥市经开区信息学竞赛区赛 初中组
2022年 合肥市经开区信息学竞赛区赛 初中组T1.普通排序 题目描述 牛牛是一位编程爱好者,今天第一次参加初中组比赛,看到第一题,不要紧张,来一个简单的排序题做一做,牛牛学过了很多排序,一直想练个手,这回机会来了,给牛牛N个数(n<=100),每个数都在(0 ~ 1000)之间…...
【工作小札】自定义classloader实现热加载jar
文章目录楔子第一步:添加maven依赖第二步:创建jar包路径构造类第三步:定义需要被加载的jar的目录结构第四步:创建自定义类加载器1 继承ClassLoader并实现Closeable接口2 标记该加载器支持并行类加载机制3 私有化构造方法ÿ…...
spring—AOP
系列文章目录 Spring中AOP技术的学习 文章目录系列文章目录前言一、AOP核心概念二、AOP入门案例1.AOP入门案例思路分析2.AOP入门案例实现三、AOP工作流程四、AOP切入点表达式五、AOP通知类型六、案例:测量业务层接口万次执行效率1.项目结构2.实现类七、AOP获取通知…...
自己曾经的C++笔记【在c盘爆满的时候找到的回忆】
文章目录**C与C的区别** (二)类和对象构造函数和析构函数C特殊成员C友元C类的继承C虚函数和多态C模板C可变参模板CSTL容器篇C迭代器C仿函数C函数适配器CSTL算法C智能指针C类型推断CIO流C正则表达式具有特殊意义的元字符量词元字符校验数字的表达式校验字符的表达式特…...
Nginx 实战-负载均衡
一、负载均衡今天学习一下Nginx的负载均衡。由于传统软件建构的局限性,加上一台服务器处理能里的有限性,在如今高并发、业务复杂的场景下很难达到咱们的要求。但是若将很多台这样的服务器通过某种方式组成一个整体,并且将所有的请求平均的分配…...
本周大新闻|128GB版Quest 2再降价,Mojo Vision完成“新A轮”融资
本周XR大新闻,AR方面,DigiLens推出SRG表面浮雕光栅衍射光波导;索尼成立Sony Research;NuEyes推出牙医场景AR眼镜NuLoupes;苹果EMG手环、AR/VR眼球追踪专利公布。 VR方面,128GB版Quest 2降至349美元&#x…...
【论文阅读】如何给模型加入先验知识
如何给模型加入先验知识 1. 基于pretain模型给模型加入先验 把预训练模型的参数导入模型中,这些预训练模型在另一个任务中已经p retrain好了模型的weight,往往具备了一些基本图片的能力 2. 基于输入给模型加入先验 比如说鸟类的头部是一个重要的区分部分&#x…...
arm系列交叉编译器各版本区别
目录交叉编译器命名规则具体编译器举例crosstool-ng交叉编译工具样本arm交叉编译器举例几个概念ABI与EABIgnueabi与gnueabihf参考交叉编译器命名规则 交叉编译器的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-language] arch - 体系架构, 如arm&…...
随笔记录工作日志
工作中遇到的问题随笔记录 1、将map集合中的key/value数据按照一定的需求过滤出来,并将过滤出来的map的key值存到list集合中 首先想到的是stream流,但是我对stream流的用法基本不熟,记不住方法,如果坚持用stream流去实现这个需求…...
LinkedHashMap源码分析以及LRU的应用
LinkedHashMap源码分析以及LRU的应用 LinkedHashMap简介 LinkedHashMap我们都知道是在HashMap的基础上,保证了元素添加时的顺序;除此之外,它还支持LRU可以当做缓存中心使用 源码分析目的 分析保持元素有序性是如何实现的 LRU是如何实现的…...
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
交换一次的先前排列【LC1053】 给你一个正整数数组 arr(可能存在重复的元素),请你返回可在 一次交换(交换两数字 arr[i] 和 arr[j] 的位置)后得到的、按字典序排列小于 arr 的最大排列。 如果无法这么操作,…...
Canal增量数据订阅和消费——原理详解
文章目录 简介工作原理MySQL主备复制原理canal 工作原理Canal-HA机制应用场景同步缓存 Redis /全文搜索 ES下发任务数据异构简介 canal 翻译为管道,主要用途是基于 MySQL 数据库的增量日志 Binlog 解析,提供增量数据订阅和消费。 早期阿里巴巴因为杭州和美国双机房部署,存…...
为什么要使用线程池
Java线程的创建非常昂贵,需要JVM和OS(操作系统)配合完成大量的工作: (1)必须为线程堆栈分配和初始化大量内存块,其中包含至少1MB的栈内存。 (2)需要进行系统调用,以便在OS(操作系统)…...
在云服务部署前后端以及上传数据库
1.上传数据库(sql文件) 首先建立一个目录,用于存放要部署的sql文件,然后在此目录中进入mysql 进入后建立一个数据库,create database 数据库名 完成后,通过select * from 表名可以查到数据说明导入成功。 2.部署Maven后端 将Ma…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...




















































