当前位置: 首页 > article >正文

Spring Security(maven项目) 3.0.3.0版本

前言:

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

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

Security  FilterSecurity自定义模板

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

      //自定义配置    
}

Security Chain Filter 注册模板

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];
    }
}

内存认证模板 · 一

    //基本配置
    //可以通过修改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,自己随便整一个

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

第四步:实体类

第五步:Mapper层

第六步:创建Servlet接口

第七步:实现Servlet

第八步:创建控制类

第九步:

第十步:启动

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

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

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

登录成功

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


http://www.kler.cn/a/533080.html

相关文章:

  • Redis - String相关命令
  • 走向基于大语言模型的新一代推荐系统:综述与展望
  • STM32F103ZET6完整技术点(持续更新~)
  • Vue指令v-on
  • C基础寒假练习(2)
  • C语言实现字符串排序:从代码到原理深度解析
  • 接口测试通用测试用例
  • 深度剖析八大排序算法
  • 【MySQL — 数据库基础】深入解析MySQL的约束操作
  • 如何获取sql数据中时间的月份、年份(类型为date)
  • 【大数据技术】本机PyCharm远程连接虚拟机Python
  • 【电脑系统】电脑突然(蓝屏)卡死发出刺耳声音
  • 第 11 课 Python 多线程
  • idea中git的简单使用
  • 基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现
  • OpenAI的第二个AI Agent:Deep Research完全解读!
  • CTFSHOW-WEB入门-命令执行71-77
  • 【C++】STL——vector底层实现
  • 如何构建ObjC语言编译环境?构建无比简洁的clang编译ObjC环境?Windows搭建Swift语言编译环境?
  • MYSQL面试题总结(题目来源JavaGuide)
  • 【MySQL】MySQL经典面试题深度解析
  • 【归属地】批量号码归属地查询按城市高速的分流,基于WPF的解决方案
  • 面试经典150题——栈
  • 基于Flask的全国星巴克门店可视化分析系统的设计与实现
  • 70、训练yolov11-pose关键点训练、部署TensorRTNCNN部署昇腾310I Duo卡
  • 深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用