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

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解(源码级讲解,耐心看完)

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解

这里我先引出问题然后再来一步步进行剖析,SpringSecurity到底是如何实现引入依赖后所有请求都需要进行认证并且会弹出login登录表单页面.

接下来会对SpringBoot的自动装配进行详解,SpringSecurity也是通过自动装配实现以上一系列操作的

流程分析

SpringBoot自动装配原理

首先看到启动类上的@SpringBootApplication注解

image.png

@SpringBootApplication是一个复合注解也可以说是一个组合注解,我们通过查看源码的方式点击去看看

image.png

可以看到@SpringBootConfiguration注解代表标注当前为SpringBoot配置类,@EnableAutoConfiguration注解代表开启自动装配,@ComponentScan代表需要扫描的组件.这里主要需要进行深入的就是@EnableAutoConfiguration,因为需要深入SpringBoot是如何进行自动配置的,我们进入@EnableAutoConfiguration源码中.

image.png

可以看到这里@Import导入了作为参数的这个类,AutoConfigurationImportSelector便是在容器中自动导入一些组件,我们继续看看这个类的源码

image.png

这里直接搜索getAutoConfigurationEntry()这个方法,这个方法是获取自动配置的内容.下面这行代码很重要,返回了一个List的configurations,我们进入与之对应的getCandidateConfigurations()源码中看看

List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);

image.png

然后我们继续看看这个ImportCandidates.load()的源码到底加载什么内容

image.png

findUrlsInClasspath() 方法扫描所有jar包类路径下 META-INF/spring/%s.imports(META-INF/spring/目录下所有以.imports结尾)
image.png

image.png

根据 .imports 文件中获取到 xxxAutoConfiguration 类名,然后把他们添加在容器中,进行自动装配如,org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,我们继续查看源码.

image.png

SpringBootWebSecurityConfiguration

这个类是 spring boot 自动配置类,通过这个源码得知,默认情况下对所有请求进行权限控制:

image.png

这里指定了所有的请求都需要进行认证操作,并且支持表单登录和Basic认证

使用条件
# SpringBootWebSecurityConfiguration默认配置的使用条件限制:
- classpath下存在 SecurityFilterChain.class, HttpSecurity.class
- 当前应用中没有 SecurityFilterChain 的实例

这里说明我们没有进行自定义的任何配置,SpringBoot就会采用自动加载默认配置.

image.png

通过这个注解可以看到默认配置的条件限制是什么

image.png

image.png

最终可以发现一个是基于Bean的另外一个是基于类的也就与刚刚能够对上了,classpath下存在 SecurityFilterChain.class, HttpSecurity.class,当前容器中没有 SecurityFilterChain 的实例

相关文章:

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解(源码级讲解,耐心看完)

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解 这里我先引出问题然后再来一步步进行剖析,SpringSecurity到底是如何实现引入依赖后所有请求都需要进行认证并且会弹出login登录表单页面. 接下来会对SpringBoot的自动装配进行详解,SpringSecurity也是通过自动装配…...

Java Web是前端吗:深入解析Java Web技术的定位与边界

Java Web是前端吗&#xff1a;深入解析Java Web技术的定位与边界 在探讨Java Web是否属于前端领域时&#xff0c;我们首先需要明确Java Web技术的定位和它所涉及的范畴。本文将从四个方面、五个方面、六个方面和七个方面来深入解析这一问题&#xff0c;带您领略Java Web技术的…...

The minCompileSdk (34) specified in adependency‘s AAR metadata

新版AS新增Activity的时候&#xff0c;数据结构是&#xff1a;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应用安全》 三、校企合作&#xff0c;产学研结合四、大模型时代的数字安全五、 网络安全无小事 一、图书背景 大模型风潮已掀起&#xff0c;各大巨头争相入局&#xff0c;从ChatGPT到Sor…...

【C++入门到精通】C++ thread线程库 [ C++入门 ]

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

CMakeFile.txt通过sysroot方式后生成makefile报错

报错信息如下&#xff1a; -- 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&#xff08;Open Fixed-layout Document &#xff09;是我国自主制定的一种开放版式文件格式标准。OFD文档具有不易被篡改、格式独立、版式固定等特点&#xff0c;目前常用于政府公文、金融、电子发票等领域。 如果想要通过Python将Office文档&#xff08;如Word、Excel或…...

【java11】java11新特性之局部变量类型推断升级

局部变量类型推断是java10开始新增的新特性&#xff0c;java11中对局部变量推断进行了升级&#xff0c;var支持添加注解的语法格式&#xff0c;Java10中是无法实现的&#xff0c;在Java11中加入了这样的语法。 Lambda中使用var修饰符 Java11允许在lambda表达式中使用var&…...

遥感卫星影像处理流程

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

【AR开发-开源框架】使用Sceneform-EQR快速开发AR应用,当前接入了AREngine、ORB-SLAM,可快速地适配不同的安卓设备

Sceneform-EQR Sceneform 概览 Sceneform是一个3D框架&#xff0c;具有基于物理的渲染器&#xff0c;针对移动设备进行了优化&#xff0c;使您可以轻松构建增强现实应用程序&#xff0c;而无需OpenGL。 借助 Sceneform&#xff0c;您可以轻松地在 AR 应用和非 AR 应用中渲染…...

学生信息管理系统C++

设计目的 使学生进一步理解和掌握课堂上所学的面向对象C编程知识&#xff0c;巩固和加深学生对C面向对象课程的基本知识的理解和掌握。掌握C面向对象编程和程序调试的基本技能&#xff0c;学会利用C语言进行基本的软件设计&#xff0c;着重提高运用C面向对象语言解决实际问题的…...

前端开发三大主流框架解析

Web前端三大主流框架分别是Angular、React和Vue.js。以下是《优联前端》关于这三个框架解析介绍&#xff1a; Angular&#xff1a; 来源与开发者&#xff1a;Angular是由Google开发的前端框架。功能特点&#xff1a;Angular是一个完整的框架&#xff0c;包括了数据绑定、组件化…...

【2.文件和目录相关(下)】

一、查看文件内容命令 1、cat 文件名&#xff1a;用于显示文件内容&#xff0c;比如 cat test.c。 &#xff08;1&#xff09;cat -b test.c 表示加行号显示文件内容。 &#xff08;2&#xff09;cat -s test.c 表示多个空行合并成一个空行显示。 2、nl 文件名&#xff1a;…...

【C语言】结构体与内存对齐

前言 在本篇博客&#xff0c;我将介绍结构体类型&#xff0c;结构体变量的创建和初始化&#xff0c;重点介绍结构中存在的内存对齐。 结构变量 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 在理解结构的时候&#xff0c;我们…...

【机器学习】之 kmean算法原理及实现

基本概念 K-Means 聚类算法的目标是将数据集分成 ( K ) 个簇&#xff0c;使得每个簇内的数据点尽可能相似&#xff0c;而簇与簇之间尽可能不同。这种相似度是通过计算数据点与簇中心的距离来衡量的。 算法步骤 选择簇的数量 ( K )&#xff1a;随机选择 ( K ) 个数据点作为初…...

国产高边驱动HD70202Q替换英飞凌BTS7040-2

高边驱动也称之为高边开关&#xff0c;主要用于车内负载的驱动与开关&#xff0c;并对负载进行保护和诊断。高边驱动以高可靠性、灵活性、低功耗以及小型轻量等特点&#xff0c;正逐渐替代传统的保险丝、继电器等方案。 RAMSUN提供的HD70202Q车规级双通道智能高边驱动的输入控…...

2024年06月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年06月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌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&#xff0c;这是由清华大学研究团队最新提出的&#xff0c;同样遵循 YOLO 系列设计原则&#xff0c;致力于打造实时端到端的高性能目标检测器。 方法 创新 双标签分配策略 众所…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...