你好 Spring Security

本節介紹如何使用 Spring Security 和 Spring Boot 的最低設定,然後指導您接下來的步驟。

完整的入門應用程式可在我們的示例倉庫中找到。為方便起見,您可以下載一個由Spring Initializr 準備的最小 Spring Boot + Spring Security 應用程式

更新依賴項

您首先需要將 Spring Security 新增到應用程式的類路徑中;有兩種方法可以做到這一點:使用 MavenGradle

啟動你好 Spring Security Boot

將 Spring Security 新增到類路徑後,您現在可以執行 Spring Boot 應用程式。以下程式碼片段顯示了一些輸出,表明您的應用程式中已啟用 Spring Security。

執行 Spring Boot 應用程式
  • Maven

  • Gradle

  • Jar

$ ./mvnw spring-boot:run
...
INFO 23689 --- [  restartedMain] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336

...
$ ./gradlew :bootRun
...
INFO 23689 --- [  restartedMain] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336

...
$ java -jar target/myapplication-0.0.1.jar
...
INFO 23689 --- [  restartedMain] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336

...

現在它正在執行,您可以嘗試訪問一個端點以檢視會發生什麼。如果您在沒有憑據的情況下訪問端點,如下所示

查詢受保護的 Boot 應用程式
$ curl -i https://:8080/some/path
HTTP/1.1 401
...

那麼 Spring Security 會以 401 Unauthorized 拒絕訪問。

如果您在瀏覽器中提供相同的 URL,它將重定向到預設登入頁面。

如果您使用憑據(在控制檯輸出中找到)訪問端點,如下所示

使用憑據查詢
$ curl -i -u user:8e557245-73e2-4286-969a-ff57fe326336 https://:8080/some/path
HTTP/1.1 404
...

那麼 Spring Boot 將處理該請求,在本例中返回 404 Not Found,因為 /some/path 不存在。

從這裡,您可以

執行時預期

Spring Boot 和 Spring Security 的預設配置在執行時提供以下行為

瞭解 Spring Boot 如何與 Spring Security 協同工作以實現這一點可能會有所幫助。檢視Boot 的安全自動配置,它執行以下操作(為便於說明而簡化)

Spring Boot 安全自動配置
@EnableWebSecurity (1)
@Configuration
public class DefaultSecurityConfig {
    @Bean
    @ConditionalOnMissingBean(UserDetailsService.class)
    InMemoryUserDetailsManager inMemoryUserDetailsManager() { (2)
        String generatedPassword = // ...;
        return new InMemoryUserDetailsManager(User.withUsername("user")
                .password(generatedPassword).roles("USER").build());
    }

    @Bean
    @ConditionalOnMissingBean(AuthenticationEventPublisher.class)
    DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(ApplicationEventPublisher delegate) { (3)
        return new DefaultAuthenticationEventPublisher(delegate);
    }
}
  1. 新增 @EnableWebSecurity 註解。(除此之外,這會將Spring Security 的預設 Filter作為 @Bean 釋出)

  2. 釋出一個 UserDetailsService @Bean,其使用者名稱為 user,並生成一個隨機密碼,該密碼將記錄到控制檯

  3. 釋出一個用於釋出身份驗證事件的AuthenticationEventPublisher @Bean

Spring Boot 將任何作為 @Bean 釋出的 Filter 新增到應用程式的過濾器鏈中。這意味著將 @EnableWebSecurity 與 Spring Boot 結合使用會自動為每個請求註冊 Spring Security 的過濾器鏈。

安全用例

從這裡開始,您可能想去很多地方。要弄清楚您和您的應用程式下一步是什麼,請考慮 Spring Security 旨在解決的這些常見用例

如果這些都不符合您的需求,請按以下順序考慮您的應用程式

  1. 協議:首先,考慮您的應用程式將用於通訊的協議。對於基於 Servlet 的應用程式,Spring Security 支援 HTTP 和Websockets

  2. 身份驗證:接下來,考慮使用者將如何進行身份驗證,以及該身份驗證是無狀態還是有狀態

  3. 授權:然後,考慮您將如何確定使用者被授權執行什麼操作

  4. 防禦:最後,與 Spring Security 的預設保護整合,並考慮您需要哪些額外的保護

© . This site is unofficial and not affiliated with VMware.