SecurityAutoConfiguration
是Spring Boot
提供的安全自动配置类。
它仅在类DefaultAuthenticationEventPublisher
存在于classpath
上时才进行配置。配置包含如下几个方面 :
- 注册安全属性
bean SecurityProperties
,相应的配置属性来自外部配置项spring.security
,这些属性会被相应的安全配置机制采用; - 注册
bean AuthenticationEventPublisher
,实现类型使用DefaultAuthenticationEventPublisher
;仅在类型为
AuthenticationEventPublisher
的bean
不存在时才定义; - 导入另外三个安全配置类 :
SpringBootWebSecurityConfiguration
如果用户没有提供自定义的
WebSecurityConfigurerAdapter
,则提供一个缺省的WebSecurityConfigurerAdapter
用于配置Sping Security Web
安全。WebSecurityEnablerConfiguration
在
Servlet
环境中,bean WebSecurityConfigurerAdapter
存在,并且名为springSecurityFilterChain
的bean
不存在的情况下,使用注解@EnableWebSecurity
。该配置文件的作用是万一用户忘记了使用注解@EnableWebSecurity
,这里保证该注解被使用从而保障springSecurityFilterChain bean
的定义。SecurityDataConfiguration
配置
Spring Security
跟Spring Data
的整合,仅在Spring Security Data
被使用时才启用。具体来讲,是在SecurityEvaluationContextExtension
类存在于classpath
(Spring Security Data
包的一个类)上并且容器中不存在该类型的bean
时,向容器注册一个这样的bean
。
源代码
源代码版本 : spring-boot-autoconfigure 2.1.3.RELEASE
package org.springframework.boot.autoconfigure.security.servlet;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.security.SecurityDataConfiguration;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.security.authentication.AuthenticationEventPublisher;
import org.springframework.security.authentication.DefaultAuthenticationEventPublisher;
// 这是一个配置类
@Configuration
// 仅在类 DefaultAuthenticationEventPublisher 存在于 classpath 上时才启用
@ConditionalOnClass(DefaultAuthenticationEventPublisher.class)
// 注册配置属性 bean :
// 名称 : spring.security-org.springframework.boot.autoconfigure.security.SecurityProperties
// 类型 SecurityProperties
// 对应属性前缀 : spring.security
@EnableConfigurationProperties(SecurityProperties.class)
// 导入另外三个配置文件
@Import({ SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class,
SecurityDataConfiguration.class })
public class SecurityAutoConfiguration {
// 定义一个认证事件发布器bean,仅在类型为 AuthenticationEventPublisher 的bean不
// 存在于容器上时才生效
@Bean
@ConditionalOnMissingBean(AuthenticationEventPublisher.class)
public DefaultAuthenticationEventPublisher authenticationEventPublisher(
ApplicationEventPublisher publisher) {
// 所定义的认证事件发布器bean类型使用 DefaultAuthenticationEventPublisher
return new DefaultAuthenticationEventPublisher(publisher);
}
}