Spring Security(maven项目) 3.0.3.0版本

news/2025/2/5 22:39:03 标签: spring, maven, java
前言:

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

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

Security  FilterSecurity自定义模板

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

      //自定义配置    
}

Security Chain Filter 注册模板

java">public class SecurityWebApplicationInitializer
        extends AbstractAnnotationConfigDispatcherServletInitializer {


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

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[0];
    }

    @Override
    protected String[] getServletMappings() {
        return new String[0];
    }
}

内存认证模板 · 一

javascript">    //基本配置
    //可以通过修改username和password达到自定义登录
    @Bean
    public 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,自己随便整一个

java">create table user_test
(
    username varchar(255) null,
    password varchar(255) null,
    id       int          not null
        primary key
);

第四步:实体类

第五步:Mapper层

第六步:创建Servlet接口

第七步:实现Servlet

第八步:创建控制类

第九步:

第十步:启动

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

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

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

登录成功

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


http://www.niftyadmin.cn/n/5842444.html

相关文章

Linux进程状态及其转换

在Linux系统中&#xff0c;进程是操作系统进行资源分配和调度的基本单位。每个进程在执行过程中会经历不同的状态&#xff0c;这些状态反映了进程当前的活动情况。通过top命令&#xff0c;我们可以实时查看系统中各个进程的状态。理解这些状态及其转换关系&#xff0c;对于系统…

基于RLS的自适应滤波器设计与Matlab实现

引言 自适应滤波器在信号处理领域具有重要应用&#xff0c;包括系统辨识、噪声消除和信道均衡等。递归最小二乘&#xff08;RLS&#xff09;算法因其快速收敛特性成为经典自适应算法之一。本文详细介绍RLS算法原理&#xff0c;并给出Matlab实现示例。 一、RLS算法原理 1.1 算…

Qt中的UIC、MOC、RCC宏定义说明

在Qt6新建工程的时候&#xff0c;CMakeLists.txt中会默认带有UIC&#xff0c;MOC&#xff0c;RCC的3个宏定义。 set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) uic(User Interface Compiler)&#xff0c;用户界面编译器&#xff0c;将根据.ui文件生成相…

C_数据结构(队列) —— 队列的初始化、入队列队尾、队列判空、出队列队头、取队头队尾数据、队列有效元素个数、销毁队列

目录 一、概念与结构 二、队列的实现 1、队列的初始化 1. 函数目的 2. 参数说明 3. 断言检查 4. 初始化队列的头尾指针 5. 初始化队列的大小 6. 总结 2、入队列队尾 1. 函数目的 2. 参数说明 3. 断言检查 4. 申请新节点 5. 初始化新节点 6. 将新节点插入队列 …

LabVIEW涡轮诊断系统

一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备&#xff0c;其运行状态直接关系到生产安全与经济效益。据统计&#xff0c;涡轮故障导致的非计划停机可造成每小时数十万元的经济损失&#xff0c;且突发故障可能引发严重安全事故。传统人…

OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

360手机刷机 360手机解Bootloader 360手机ROOT

360手机刷机 360手机解Bootloader 360手机ROOT 问&#xff1a;360手机已停产&#xff0c;现在和以后&#xff0c;能刷机吗&#xff1f; 答&#xff1a;360手机&#xff0c;是肯定能刷机的 360手机资源下载网站 360手机-360手机刷机RootTwrp 360os.top 360rom.github.io 一、…

vue3 store刷新失效场景解决方案

1. 安装 vuex-persistedstate 插件 vuex-persistedstate 是一个常用的插件&#xff0c;可以方便地将 Vuex 状态持久化到 localStorage 或 sessionStorage 中 npm install vuex-persistedstate2. 配置 Vuex Store 使用 sessionStorage // store/index.js import { createStore }…