【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…...

Onedrive for Business迁移方案 | 分享一
文章目录 前言 一、Onedrive for Business迁移方案应用范围? 1.准备目标平台 2.导出源平台数据 <...

pt01数据类型、语句选择
python01 pycharm常用快捷键 (1) 移动到本行开头:home键 (2) 移动到本行末尾:end键盘 (3) 注释代码:ctrl / (4) 复制行:ctrl d #光标放行上 (5) 删除行:shift delete (6) 选择列:shift alt 鼠标左键…...

ChatGPT 存在很大的隐私问题
当 OpenAI 发布时 2020 年 7 月的 GPT-3,它提供了用于训练大型语言模型的数据的一瞥。 根据一篇技术论文,从网络、帖子、书籍等中收集的数百万页被用于创建生成文本系统。 在此数据中收集的是您在网上分享的一些关于您自己的个人信息,这些数据现在让 O…...

图的迭代深度优先遍历
图的深度优先遍历(或搜索)类似于树的深度优先遍历(DFS)。这里唯一的问题是,与树不同,图可能包含循环,因此一个节点可能会被访问两次。为避免多次处理一个节点,请使用布尔访问数组。 例子: 输入: n = 4, e = 6 0 -> 1, 0 -> 2, 1 -> 2, 2 -> 0, …...

华为OD机试-开放日活动-2022Q4 A卷-Py/Java/JS
某部门开展Family Day开放日活动,其中有个从桶里取球的游戏,游戏规则如下:有N个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球, 每个小桶装的小球数量记录在数组 bucketBallNums 中,游戏开始时,要求所有…...

两亲性聚合物:Lauric acid PEG Maleimide,Mal-PEG-Lauric acid,月桂酸PEG马来酰亚胺,试剂知识分享
Lauric acid PEG Maleimide,Lauric acid PEG Mal| 月桂酸PEG马来酰亚胺 | CAS:N/A | 端基取代率:95%一、试剂参数信息: 外观(Appearance):灰白色/白色固体或粘性液体取决于分子量 溶解性&am…...

FB使用入口点函数例子
一、DLL的入口点 1.1 VFB的自带DLL模式入口 FB是把代码转成C(GCC编译)或者汇编(GAS编译)后编译的,本身就有一个main函数,所以在程序里其实不需要入口点,直接写就可以顺序执行,而有的…...

学习周报4/9
文章目录前言文献阅读摘要简介方法结论时间序列预测总结前言 本周阅读文献《Improving LSTM hydrological modeling with spatiotemporal deep learning and multi-task learning: A case study of three mountainous areas on the Tibetan Plateau》,文章主要基于…...

49天精通Java,第14天,Java泛型方法的定义和使用
目录一、基本介绍1、Java泛型的基本语法格式为:2、在使用泛型时,还需要注意以下几点:二、泛型的优点1、类型安全2、消除强制类型转换3、更高的效率4、潜在的性能收益三、常见泛型字母含义四、使用泛型时的注意事项五、泛型的使用1、泛型类2、…...

20230402英语学习
reasonable adj.合理的;通情达理的;明智的,理智的 abstract adj.抽象的,理论的 reflection n.反射; 映像, 倒影; 反映; 表达, 抒发; (长相等)酷似的人; 惟妙惟肖的事物; 深思; 考虑 instruction n.教授; 教导, 指导; 指示, 命令…...