天天看點

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();
    }

}