SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解(源码级讲解,耐心看完)
SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解
这里我先引出问题然后再来一步步进行剖析,SpringSecurity到底是如何实现引入依赖后所有请求都需要进行认证并且会弹出login登录表单页面.
接下来会对SpringBoot的自动装配进行详解,SpringSecurity也是通过自动装配实现以上一系列操作的
流程分析
SpringBoot自动装配原理
首先看到启动类上的@SpringBootApplication注解
@SpringBootApplication是一个复合注解也可以说是一个组合注解,我们通过查看源码的方式点击去看看
可以看到@SpringBootConfiguration注解代表标注当前为SpringBoot配置类,@EnableAutoConfiguration注解代表开启自动装配,@ComponentScan代表需要扫描的组件.这里主要需要进行深入的就是@EnableAutoConfiguration,因为需要深入SpringBoot是如何进行自动配置的,我们进入@EnableAutoConfiguration源码中.
可以看到这里@Import导入了作为参数的这个类,AutoConfigurationImportSelector便是在容器中自动导入一些组件,我们继续看看这个类的源码
这里直接搜索getAutoConfigurationEntry()这个方法,这个方法是获取自动配置的内容.下面这行代码很重要,返回了一个List的configurations,我们进入与之对应的getCandidateConfigurations()源码中看看
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
然后我们继续看看这个ImportCandidates.load()的源码到底加载什么内容
findUrlsInClasspath() 方法扫描所有jar包类路径下 META-INF/spring/%s.imports(META-INF/spring/目录下所有以.imports结尾)
根据 .imports 文件中获取到 xxxAutoConfiguration 类名,然后把他们添加在容器中,进行自动装配如,org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,我们继续查看源码.
SpringBootWebSecurityConfiguration
这个类是 spring boot 自动配置类,通过这个源码得知,默认情况下对所有请求进行权限控制:
这里指定了所有的请求都需要进行认证操作,并且支持表单登录和Basic认证
使用条件
# SpringBootWebSecurityConfiguration默认配置的使用条件限制:
- classpath下存在 SecurityFilterChain.class, HttpSecurity.class
- 当前应用中没有 SecurityFilterChain 的实例
这里说明我们没有进行自定义的任何配置,SpringBoot就会采用自动加载默认配置.
通过这个注解可以看到默认配置的条件限制是什么
最终可以发现一个是基于Bean的另外一个是基于类的也就与刚刚能够对上了,classpath下存在 SecurityFilterChain.class, HttpSecurity.class,当前容器中没有 SecurityFilterChain 的实例
相关文章:

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解(源码级讲解,耐心看完)
SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解 这里我先引出问题然后再来一步步进行剖析,SpringSecurity到底是如何实现引入依赖后所有请求都需要进行认证并且会弹出login登录表单页面. 接下来会对SpringBoot的自动装配进行详解,SpringSecurity也是通过自动装配…...
Java Web是前端吗:深入解析Java Web技术的定位与边界
Java Web是前端吗:深入解析Java Web技术的定位与边界 在探讨Java Web是否属于前端领域时,我们首先需要明确Java Web技术的定位和它所涉及的范畴。本文将从四个方面、五个方面、六个方面和七个方面来深入解析这一问题,带您领略Java Web技术的…...
The minCompileSdk (34) specified in adependency‘s AAR metadata
新版AS新增Activity的时候,数据结构是:import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInse…...

MySQl基础入门⑬.5
创建多表连接查询 表准备 CREATE TABLE 员工信息 (员工号 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,姓名 VARCHAR(50) NOT NULL,性别 ENUM(男, 女) NOT NULL,出生日期 DATE NOT NULL,部门 VARCHAR(50) NOT NULL,手机号码 VARCHAR(20) NOT NULL,-- 根据数据库不同&#x…...

【遂愿赠书 - 1期】:安恒“网安三剑客”-大模型时代下的网络安全实战指南
文章目录 一、图书背景二、网安实战宝典2.1《内网渗透技术》2.2《渗透测试技术》2.3《Web应用安全》 三、校企合作,产学研结合四、大模型时代的数字安全五、 网络安全无小事 一、图书背景 大模型风潮已掀起,各大巨头争相入局,从ChatGPT到Sor…...

【C++入门到精通】C++ thread线程库 [ C++入门 ]
阅读导航 引言一、thread类的简单介绍二、thread类的用法1. 创建线程2. 使用 Lambda 表达式3. 传递参数给线程4. 线程的 join 和 detach5. 检查线程是否可 join6. 线程的 ID7. 线程的移动语义8. 线程的析构🚨 注意事项 三、线程函数参数温馨提示 引言 C thread线程…...

CMakeFile.txt通过sysroot方式后生成makefile报错
报错信息如下: -- The C compiler identification is unknown -- The CXX compiler identification is unknown -- Check for working C compiler: /home/xj/asm/host/bin/aarch64-buildroot-linux-gnu-gcc -- Check for working C compiler: /home/xj/asm/host/bi…...

Python 将Word、Excel、PDF、PPT文档转为OFD文档
OFD(Open Fixed-layout Document )是我国自主制定的一种开放版式文件格式标准。OFD文档具有不易被篡改、格式独立、版式固定等特点,目前常用于政府公文、金融、电子发票等领域。 如果想要通过Python将Office文档(如Word、Excel或…...
【java11】java11新特性之局部变量类型推断升级
局部变量类型推断是java10开始新增的新特性,java11中对局部变量推断进行了升级,var支持添加注解的语法格式,Java10中是无法实现的,在Java11中加入了这样的语法。 Lambda中使用var修饰符 Java11允许在lambda表达式中使用var&…...

遥感卫星影像处理流程
当空中的遥感卫星获取了地球数字影像,并传回地面,是否工作就结束了?答案显然是否定的,相反,这正是遥感数字图像处理工作的开始。 遥感数字图像(Digital image,后简称“遥感影像”)是…...

【AR开发-开源框架】使用Sceneform-EQR快速开发AR应用,当前接入了AREngine、ORB-SLAM,可快速地适配不同的安卓设备
Sceneform-EQR Sceneform 概览 Sceneform是一个3D框架,具有基于物理的渲染器,针对移动设备进行了优化,使您可以轻松构建增强现实应用程序,而无需OpenGL。 借助 Sceneform,您可以轻松地在 AR 应用和非 AR 应用中渲染…...

学生信息管理系统C++
设计目的 使学生进一步理解和掌握课堂上所学的面向对象C编程知识,巩固和加深学生对C面向对象课程的基本知识的理解和掌握。掌握C面向对象编程和程序调试的基本技能,学会利用C语言进行基本的软件设计,着重提高运用C面向对象语言解决实际问题的…...
前端开发三大主流框架解析
Web前端三大主流框架分别是Angular、React和Vue.js。以下是《优联前端》关于这三个框架解析介绍: Angular: 来源与开发者:Angular是由Google开发的前端框架。功能特点:Angular是一个完整的框架,包括了数据绑定、组件化…...

【2.文件和目录相关(下)】
一、查看文件内容命令 1、cat 文件名:用于显示文件内容,比如 cat test.c。 (1)cat -b test.c 表示加行号显示文件内容。 (2)cat -s test.c 表示多个空行合并成一个空行显示。 2、nl 文件名:…...

【C语言】结构体与内存对齐
前言 在本篇博客,我将介绍结构体类型,结构体变量的创建和初始化,重点介绍结构中存在的内存对齐。 结构变量 结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 在理解结构的时候,我们…...
【机器学习】之 kmean算法原理及实现
基本概念 K-Means 聚类算法的目标是将数据集分成 ( K ) 个簇,使得每个簇内的数据点尽可能相似,而簇与簇之间尽可能不同。这种相似度是通过计算数据点与簇中心的距离来衡量的。 算法步骤 选择簇的数量 ( K ):随机选择 ( K ) 个数据点作为初…...
国产高边驱动HD70202Q替换英飞凌BTS7040-2
高边驱动也称之为高边开关,主要用于车内负载的驱动与开关,并对负载进行保护和诊断。高边驱动以高可靠性、灵活性、低功耗以及小型轻量等特点,正逐渐替代传统的保险丝、继电器等方案。 RAMSUN提供的HD70202Q车规级双通道智能高边驱动的输入控…...

2024年06月在线IDE流行度最新排名
点击查看最新在线IDE流行度最新排名(每月更新) 2024年06月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…...
顺序表和链表基础操作的复习
顺序表 #include<iostream> using namespace std; 静态 //#define MAX_SIZE 50 //typedef int ElemType; //typedef struct //{ // int length; // ElemType nums[MAX_SIZE]; //}Sqlist; //动态: #define Init_SIZE 50 typedef int ElemType; typedef struct {int lengt…...

[C#]winform部署官方yolov10目标检测的onnx模型
【框架地址】 https://github.com/THU-MIG/yolov10 【算法介绍】 今天为大家介绍的是 YOLOv10,这是由清华大学研究团队最新提出的,同样遵循 YOLO 系列设计原则,致力于打造实时端到端的高性能目标检测器。 方法 创新 双标签分配策略 众所…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...