Spring Security(maven项目) 3.0.3.0版本

前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

在上一期中,我们完成了自定义账号/密码认证(基于内存认证)并得到了两个基本模板+一个自定义用户模板

Security  FilterSecurity自定义模板

@Configuration          //用于标记一个类为配置类,表示该类包含Bean的定义。
@EnableWebSecurity      //其中一个功能:注入SecurityFilterChain
public class WebSecurityConfig {//自定义配置    
}

Security Chain Filter 注册模板

public class SecurityWebApplicationInitializerextends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {// 注册Security Filter Chain// 花括号公式:带有@EnableWebSecurity的类// return new Class[]{ Security 配置 文件名.class };return new Class[]{WebSecurityConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[0];}@Overrideprotected String[] getServletMappings() {return new String[0];}
}

内存认证模板 · 一

    //基本配置//可以通过修改username和password达到自定义登录@Beanpublic UserDetailsService userDetailsService() {InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withDefaultPasswordEncoder().username().password().roles("USER").build());return manager;}

本期目标:

完成JDBC 认证的理论与实践

正片:

温故知新:

上一期中,我们通过修改方法的参数完成了自定义登录,准确点叫内存认证,根据内存中的账号/密码进行认证,我们的代码会存放之内存中,其中就包含了一个叫user的一块内存区域,它储存了我们的账号和密码,SpringSecurity可以读取到他们,并且与表单进行校验

在上一期中,我们通过修改InMemoryUserDetailsManager.create中的参数,完成基于内存认证。

内存认证:重点在于内存二字

为了更好的去阅读,这里统一些许内容:

账号:即包含了用户名和密码

作者得出了新结论,我称之为内存2.0版本:内存二字在于形式,即,用户名/密码储存的形式,用户名/密码储存在内存中,当需要认证时,取出内存中的用户名/密码与前端表单进行校验

内存二字的核心在于形式,即:账号的来源与储存的形式;例如:内存认证,就是账号来源与储存在内存之中

回到我们的正片JDBC认证,JDBC认证和内存认证异曲同工之妙,JDBC也是指账号的来源与储存形式,这里作者认为,JDBC是在内存认证的基础上迭代而成的,也就是它保留了部分内存认证的特定,即JDBC和内存认证的区别在于账号来源的不同,以及相同的储存在内存的这一特点

为了大伙更简单的阅读代码,这里我将代码提交到了码云

Security JDBC认证: 用于验证的基本代码

为了避免不必要的空指针问题,我们采用了经典的CRUD模板

这个不必的空指针问题是这个

由于没有很好的办法解决,所以使用了全新的版本

我们总共分为了以下步骤:

第一步:在项目中添加对应数据库驱动(mysql),以及JDBC框架(mybatis)

第二步:在application.yaml文件中注册数据库

第三步:添加测试使用的表

第四步:创建实体类

第五步:创建Mapper层

第六步:创建Servlet层

第七步:创建Imp层

第八步:创建控制类

第九步:修改内存认证的username和password

第十步:启动

有人就会问,你都提供代码了,为什么数据库不顺带提供,别问,问就是没添加

第一步:添加数据库驱动和JDBC框架

第二步:注册数据库

第三步:没有提供SQL,自己随便整一个

create table user_test
(username varchar(255) null,password varchar(255) null,id       int          not nullprimary key
);

第四步:实体类

第五步:Mapper层

第六步:创建Servlet接口

第七步:实现Servlet

第八步:创建控制类

第九步:

第十步:启动

为了更直观的去体验,我们在内存认证的基础上进行一个添加断点

在运行这句时,读取到了数据库的内容

进入登录页面,根据数据库读取的内容进行登录

登录成功

静态JDBC认证成功,即修改了用于验证的用户来源,既然有静态那么动态是什么?动态就是根据用户输入的内容,动态的去触发数据库,动态的去寻找

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

携程Java开发面试题及参考答案 (200道-上)

说说四层模型、七层模型。 七层模型(OSI 参考模型) 七层模型,即 OSI(Open System Interconnection)参考模型,是一种概念模型,用于描述网络通信的架构。它将计算机网络从下到上分为七层,各层的功能和作用如下: 物理层:物理层是计算机网络的最底层,主要负责传输比特流…

【Rust自学】16.4. 通过Send和Sync trait来扩展并发

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 16.4.1. Send和Sync trait Rust语言本身的并发特性较少&#xff0c;目前所提及的并发特性都来自于标准库&#xff0c;而不是语言本身。其…

MYSQL面试题总结(题目来源JavaGuide)

MYSQL基础架构 问题1&#xff1a;一条 SQL语句在MySQL中的执行过程 1. 解析阶段 (Parsing) 查询分析&#xff1a;当用户提交一个 SQL 语句时&#xff0c;MySQL 首先会对语句进行解析。这个过程会检查语法是否正确&#xff0c;确保 SQL 语句符合 MySQL 的语法规则。如果发现…

传输层协议——TCP协议

文章目录 &#x1f34d;TCP协议谈谈可靠性TCP协议格式序号与确认序号窗口大小六个标志位 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协…

pycharm(2)

conda 我下载安装conda的时候产生了各种问题&#xff0c;最终我发现&#xff0c;打开杀毒软件会有阻碍 cuda的版本问题很大&#xff0c;我尝试多个版本之后&#xff0c;发现anaconda3-2024.06.1-windows-x86_64安装了之后不会报错&#xff0c;另外pycharm的版本也一直有问题&a…

python算法和数据结构刷题[3]:哈希表、滑动窗口、双指针、回溯算法、贪心算法

回溯算法 「所有可能的结果」&#xff0c;而不是「结果的个数」&#xff0c;一般情况下&#xff0c;我们就知道需要暴力搜索所有的可行解了&#xff0c;可以用「回溯法」。 回溯算法关键在于:不合适就退回上一步。在回溯算法中&#xff0c;递归用于深入到所有可能的分支&…

【PyQt】pyqt小案例实现简易文本编辑器

pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器&#xff0c;使用PyQt5框架构建。以下是代码的主要功能和特点&#xff1a; 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…

Node.js与嵌入式开发:打破界限的创新结合

文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js&#xff1f;1.2 嵌入式开发的范式转变 二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案 三、实战案例&#xff1a;智能农业监测系统3.1 硬件配置3.2 软件架…

利用Vue和javascript分别编写一个“Hello World”的定时更新

目录 一、利用Vue编写一个“Hello World”的定时更新&#xff08;1&#xff09;vue编码在Html文件中&#xff08;2&#xff09;vue编码在js文件中 二、利用javascript编写一个“Hello World”的定时更新 一、利用Vue编写一个“Hello World”的定时更新 &#xff08;1&#xff…

排序算法--插入排序

插入排序是一种简单且稳定的排序算法&#xff0c;适合小规模数据或部分有序数据。 // 插入排序函数 void insertionSort(int arr[], int n) {for (int i 1; i < n; i) { // 从第二个元素开始int key arr[i]; // 当前需要插入的元素int j i - 1;// 将比 key 大的元素向后移…

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen&#xff1a;A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型&#xff0c;包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…

CH340G上传程序到ESP8266-01(S)模块

文章目录 概要ESP8266模块外形尺寸模块原理图模块引脚功能 CH340G模块外形及其引脚模块引脚功能USB TO TTL引脚 程序上传接线Arduino IDE 安装ESP8266开发板Arduino IDE 开发板上传失败上传成功 正常工作 概要 使用USB TO TTL&#xff08;CH340G&#xff09;将Arduino将程序上传…

游戏引擎 Unity - Unity 下载与安装

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

AIGC(生成式AI)试用 20 -- deepseek 初识

>> 基本概念 Ollama -- 运行大模型&#xff0c;管理运行AI大模型的工具&#xff0c;用来安装布置DeepSeek https://ollama.com/ , Get up and running with large language models. AnythingLLM -- 大模型增强应用&#xff0c;GUI大模型交互程序 Download AnythingLLM …

STM32 DMA+AD多通道

接线图 代码配置 ADC单次扫描DMA单次转运模式 uint16_t AD_Value[4]; //DMAAD多通道 void DMA_Config(void) {//定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量 ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量 DMA_InitTypeDef DMA_In…

【Java】位图 布隆过滤器

位图 初识位图 位图, 实际上就是将二进制位作为哈希表的一个个哈希桶的数据结构, 由于二进制位只能表示 0 和 1, 因此通常用于表示数据是否存在. 如下图所示, 这个位图就用于标识 0 ~ 14 中有什么数字存在 可以看到, 我们这里相当于是把下标作为了 key-value 的一员. 但是这…

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

BGP路径属性

公认必遵循 BGP必须都能识别&#xff0c;且必须发送报文必须包含 Origin&#xff1a;起源属性&#xff0c;I,E,&#xff1f;三种&#xff0c;I是BGP通过IGP协议学到的路由&#xff08;比如ospf&#xff0c;isis&#xff0c;rip&#xff09;&#xff0c;E是从EGP协议学到的&am…

Vue 图片引用方式详解:静态资源与动态路径访问

目录 前言1. 引用 public/ 目录2. assets/ 目录3. 远程服务器4. Vue Router 动态访问5. 总结6. 扩展&#xff08;图片不显示&#xff09; 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 在 Vue 开发中&#x…