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

简介: 该内容是关于SpringSecurity在SpringBoot中的自动配置详解。文章首先提出问题:SpringSecurity如何在引入依赖后使所有请求需认证并显示登录表单。接着,它探讨了SpringBoot的自动装配原理,从@SpringBootApplication注解开始,深入到@EnableAutoConfiguration的实现,解释了如何通过扫描jar包中的.imports文件来加载自动配置类。特别提到了SpringBootWebSecurityConfiguration类,该类默认设置为对所有请求进行认证,并支持表单和Basic认证。

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 的实例

相关文章
|
7月前
|
XML Java 数据库
【二十四】springboot整合spring事务详解以及实战
【二十四】springboot整合spring事务详解以及实战
289 0
|
Java 程序员 Spring
Spring文件第四课SpringIOC 的三种方案利用注解的方式.(一)
Spring文件第四课SpringIOC 的三种方案利用注解的方式.(一)
90 0
|
Java Spring 容器
【Spring Boot 源码学习】自动装配流程源码解析(下)
本篇介绍自动装配流程后续的内容,包含自动配置组件的排除,过滤 和 相关事件广播
82 3
【Spring Boot 源码学习】自动装配流程源码解析(下)
|
Java Spring
【Spring Boot 源码学习】自动装配流程源码解析(上)
本篇从Spring Boot 自动装配源码入手,分析自动配置组件加载的流程
123 1
【Spring Boot 源码学习】自动装配流程源码解析(上)
|
XML JSON 前端开发
看完这篇文章,你就是Spring/SpringBoot注解专家了(建议收藏!!! )1
看完这篇文章,你就是Spring/SpringBoot注解专家了
77 0
|
JSON 前端开发 NoSQL
看完这篇文章,你就是Spring/SpringBoot注解专家了(建议收藏!!! )2
看完这篇文章,你就是Spring/SpringBoot注解专家了
128 0
|
Java Spring
Spring文件第四课SpringIOC 的三种方案利用注解的方式.(二)
Spring文件第四课SpringIOC 的三种方案利用注解的方式.(二)
62 0
|
Java Spring
Spring文件第四课SpringIOC 的三种方案利用注解的方式(二)
Spring文件第四课SpringIOC 的三种方案利用注解的方式(二)
97 0
|
Java 程序员 Spring
Spring文件第四课SpringIOC 的三种方案利用注解的方式(一)
Spring文件第四课SpringIOC 的三种方案利用注解的方式(一)
112 0
Spring文件第四课SpringIOC 的三种方案利用注解的方式(一)
|
安全 前端开发 Java
Spring Boot 如何配置过滤器,一波梭哈~
Spring Boot 如何配置过滤器,一波梭哈~