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

news2024/10/5 22:22:04

目录

一、登录功能

1、基础登录功能

①、SQL语句

②、接口参数

③、实现思路

④、实现步骤

2、联调Bug(没有Cookie或Session)

二、登录校验

1、登录校验的实现思路

2、会话技术

①、会话与会话跟踪

②、会话跟踪方案对比

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(传统方案)

示例代码:

测试结果:(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):

Ⅱ、测试:(重复添加部门)

全局异常处理器捕获:

前端解析:

④、小结

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

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

相关文章

C# 多线程编程

1 线程与进程 进程:进程可以理解为一块包含了某些些资源的内存区域,操作系统通过进程这一方式把他的工作划分为不同的单元。一个应用程序可以对应于多个进程。 线程:线程是进程中的独立执行单元, 对于操作系统而言,他…

【学习笔记】unity脚本学习(四)【inputManager、键盘输入、鼠标输入、Raycast】

目录输入inputManagerHorizontal虚拟轴的各个属性含义(摘选自ChatGpt,部分回答不准确)键值的含义键名称命名约定:键盘输入静态函数GetKeyGetButtonKeyCodeGetButton/Down/upGetAxisGetAxisRaw 返回由 axisName 标识的虚拟轴的值&a…

【Gradle-2】一文搞懂Gradle配置

1、前言 “Gradle的配置太多了,经常版本更新还有变化,而且它还能扩展,记是记不住了,只能用到再搜了,哎,难顶” 真的难顶,但是我想挑战一下… 本文介绍的重点: Gradle配置简介Grad…

slam与导航开发

Gmapping是一种基于激光雷达数据的地图构建算法,可以用于建立机器人的环境地图。 Gmapping算法是基于粒子滤波器(Particle Filter)的SLAM算法,它通过将机器人在环境中的位姿和地图中的特征进行联合估计,实现了机器人在…

个人使用mac OS和win OS的差异

苹果 macOS 操作系统和 Windows 操作系统在很多方面有所不同,主要体现在以下几个方面: 用户界面:macOS 和 Windows 的用户界面风格不同。macOS 推崇简洁、优雅的设计,注重操作体验;Windows 软件更为丰富,但…

Doris(1):Doris介绍

1 Doris简介 Apache Doris是一个现代化的基于MPP(大规模并行处理)技术的分析型数据库产品。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(…

最小生成树和最短路径及其他

还是学过的,主要用于复习q v q 一、最小生成树 最小生成树的定义 用于无向图中,无向图指的是没有带方向路径的图,给定n个点,m条边,如果将这些点依次相连,求出连接这些点的最小数值 应用场景 根据这个算…

9 个JSON.stringify的秘密大多数开发人员却不知道

作为前端开发工程师,你一定用过JSON.stringify,但你知道它的全部秘密吗? 很久以前,我因此在工作中犯下了无法挽回的错误。如果我早点知道,就不会发生这样的悲剧。 理解 JSON.stringify 基本上,JSON.stri…

神经网络辐射场NeRF、实时NeRF Baking、有向距离场SDF、占用网络Occupancy、NeRF 自动驾驶

1 NeRF原理2 NeRF加速PlenoxelsKiloNeRFInstant NGPTensoRF3 SDF NeRF4 Occupancy NeRF5 NeRF应用简介常见应用实际应用的挑战6 NeRF自动驾驶1 NeRF原理 NeRF (Neural Radiance Fields,神经辐射场) 是2020年ECCV会议上的Best Paper,其将隐式表达推上了…

安卓玩机搞机----移植第三方rom修复 第三方GSI系统修复bug综合解析【一】

很多朋友热衷与刷写第三方非当前机型官方系统的rom。和刷写第三方gsi等等。例如 米系列机型刷写Flyme 一加机型刷写miui oppo刷写gsi等等。 很多友友也会尝试自己移植第三方rom。但此类操作最大的问题在于修复可以开机后的bug,今天的教程综合说明下这类修复思路…

STM32F103RCT6

STM32F103RCT6是一款由STMicroelectronics公司生产的基于ARM Cortex-M3内核的32位微控制器。 它具有高性能、低功耗和广泛的应用领域。 包括ADC(模数转换器) DAC(数字模拟转换器) TIM(定时器) USART&#x…

Python 中 SyntaxError: ‘yield‘ outside function 错误

当我们在函数外部使用 yield 关键字时,会出现 Python “SyntaxError: ‘yield’ outside function”。 要解决该错误,如果我们需要对每个元素执行一些运算符,请使用列表理解,或者缩进函数内部使用 yield 的代码。 下面是一个产生…

Maven(四):Maven的使用(中)

Maven(四):Maven的使用(中)前言一、实验四:创建 Maven 版的 Web 工程1、说明2、操作3、生成的pom.xml4、生成的Web工程的目录结构5、创建 Servlet5.1 在 main 目录下创建 java 目录5.2 在 java 目录下创建 …

【从零开始学Skynet】实战篇《球球大作战》(六):gateway代码设计(中)

1、编码和解码 我们来实现两个辅助方法str_unpack和str_pack,用于消息的解码和编码。 (1)str_unpack代码 local str_unpack function(msgstr)local msg {}while true dolocal arg, rest string.match( msgstr, "(.-),(.*)")if…

TCP/IP协议及配置

文章目录一、TCP/IP概述1. TCP/IP协议族2. 主机与主机之间通信的三个要素二、什么是IP地址1. 用来标识一个网络节点的互联网地址(如同电话的号码)2. IPv4地址组成三、IP地址分类1. 常用的IP地址2. 组播及科研专用四、IP地址分类(续&#xff0…

wsl下安装cuda各种踩坑记录.assets

执行nvcc -V, cuda版本位11.5 删除cuda sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*" \"*cusolver*" "*cusparse*" "*npp*" "*nvjpeg*" "cuda*" "nsight*"选择对…

打造自己特色远程桌面:SmartCode ViewerX Crack

SmartCode ViewerX VNC 查看器 ActiveX 毫不费力地将 VNC 查看器功能添加到您的应用程序 SmartCode ViewerX VNC 查看器 ActiveX 使开发人员可以使用一组直观的 ActiveX 属性和方法完全访问 VNC 查看器功能。借助ViewerX 控件,开发人员可以轻松地为其应用程序提供…

<呕心沥血>一文总结数据结构八大排序(持续更新)

目录 一、常见的八大排序 二、八大排序的算法思想 1、冒泡排序 2、选择排序 3、插入排序 4、希尔排序 5、归并排序 6、快速排序 7、堆排序 8、计数排序 三、八大排序的算法实现 一、常见的八大排序 常见的八大排序算法如下: 冒泡排序(Bubble …

Android中的接口回调机制

文章目录1.回调的含义和用途2.java实现接口回调3.Android中接口回调的体现4.接口回调在异步任务中的体现1.回调的含义和用途 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类同步调用、异步调用和回调。同步调用是一种阻…

JAVAWeb04-DOM

1. DOM 1.1 概述 1.1.1 官方文档 地址: https://www.w3school.com.cn/js/js_htmldom.asp 1.1.2 DOM 介绍 DOM 全称是 Document Object Model 文档对象模型就是把文档中的标签,属性,文本,转换成为对象来管理 1.2 HTML DOM(文档…