天天看点

Spring security源码解析系列02---要不要配置@EnableWebSecurity一、介绍二、原理解析三、小结(引入 security 两种方式)四、配置全部放过

目录

  • 一、介绍
  • 二、原理解析
    • 2.1 @EnableWebSecurity
    • 2.2 spring-boot-starter-security
  • 三、小结(引入 security 两种方式)
    • 3.1 引入 starter
    • 3.2 直接引入 对应的包
  • 四、配置全部放过

一、介绍

上一节Spring security源码解析系列01— 创建一个简单项目 已经启动了一个 简单的项目,主要就是在pom.xml 里面引入的 两个 依赖 ,启动的时候就 已经可以进行相关的验证了, 也没有进行配置 是否开启@EnableWebSecurity,就自动生效了

主要的核心配置 pom.xml 就是 如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
           

那到底要不要 配置 开启 @EnableWebSecurity ?下面来 详细分析

二、原理解析

2.1 @EnableWebSecurity

我们打开 注解 EnableWebSecurity

Spring security源码解析系列02---要不要配置@EnableWebSecurity一、介绍二、原理解析三、小结(引入 security 两种方式)四、配置全部放过

这里主要是 通过 @Import 注册 WebSecurityConfiguration.class 类,和 OAuth2相关的 等其他的配置信息 来达到 启动之后 注册 验证的功能.

WebSecurityConfiguration.class 类 的 详细功能在后面章节详细分析.

2.2 spring-boot-starter-security

如果我们引入了 spring-boot-starter-security 这类 starter 包, 我们可以进一步点击进去看一下,里面 自动依赖了哪些 jar 包.

Spring security源码解析系列02---要不要配置@EnableWebSecurity一、介绍二、原理解析三、小结(引入 security 两种方式)四、配置全部放过

首先 引入了 security 的两个核心包 , spring-security-web,spring-security-config , 而这两个包 都是依赖 spring-security-core ,这三个jar 是 security 的 必须要的,也可以通过手动指定.

Spring security源码解析系列02---要不要配置@EnableWebSecurity一、介绍二、原理解析三、小结(引入 security 两种方式)四、配置全部放过

另外一个 就是 spring-boot-starter, 这个包 是需要 引入 spring-boot-autoconfigure 这个 包的,关键就在这里 ,autoconfigure 是通过SPI 自动加载注册一些需要的类 .

打开 对应的jar 包下面的 META-INF/spring.factories,

Spring security源码解析系列02---要不要配置@EnableWebSecurity一、介绍二、原理解析三、小结(引入 security 两种方式)四、配置全部放过

这里默认已经 自动注入了 Security 的 自动配置类 SecurityAutoConfiguration.class

三、小结(引入 security 两种方式)

3.1 引入 starter

引入 starter 这类jar, SpringBoot 会 自动 动过 autoconfigure 自动来加载注入 相关的security 配置信息

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
           

这种方式 会自动加载对应的配置 ,可以不用 配置@EnableWebSecurity

3.2 直接引入 对应的包

其实对应的包就一共三个,可以自行配置, 比如spring mvc 项目 配置 之后 需要加入.

<dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>5.3.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>5.3.5.RELEASE</version>
    </dependency>
        <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-core</artifactId>
      <version>5.3.5.RELEASE</version>
    </dependency>
           

这种方式就要配置开启 @EnableWebSecurity 不然不生效

四、配置全部放过

新建一个类, 继承WebSecurityConfigurerAdapter 类, 重写一下 ,对所有的url 都放过,如下:

@Component
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/").permitAll();
    }

}