1. 程式人生 > >Spring Security(一)

Spring Security(一)

Spring Security(一)

基本原理

前言

Spring Security核心功能
  • 認證(你是誰)
  • 授權(你能幹什麼)
  • 攻擊防護(防止偽造身份)

Srping Security基本原理

專案中如果加入了Spring Security的依賴不做任何配置情況下,啟動專案後,訪問任何url都需要進行登入,SrpingSecurity預設提供了彈窗式的登入,預設使用者名稱:user,密碼會在專案啟動日誌中打印出來。

  • 簡單的表單登入
// 建立一個類,繼承 WebSecurityConfigurerAdapter 重寫 configure 方法
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 啟用表單登陸
        http.formLogin()
            .and()
            // 對請求做授權
            .authorizeRequests()
            // 任何請求
            .anyRequest()
            // 都需要身份認證
            .authenticated();
    }
}

啟動專案後,訪問任何路徑都會調轉到一個Security預設的表單頁面中。

  • Spring Security核心就是過濾器鏈
    在這裡插入圖片描述

依照這個圖可以看出 FilterSecurityInterceptor是整個過濾器鏈的最後一道關卡,ExceptionTranslationFilter會處理FilterSecurityInterceptor丟擲的異常資訊。

基本流程:

使用者訪問受保護的連結時首先會到 FilterSecurityInterceptor 如果不符合條件會拋一個異常到ExceptionTranslationFilter 然後 ExceptionTranslationFilter

會用 try catch 捕獲異常並進行相應處理,處理完會重定向到預設的登入頁面(這時候瀏覽器會響應一個Security預設的表單登入頁面),輸入使用者名稱密碼提交登入後然後會到 UsernamePasswordAuthenticationFilter 過濾器中,如果滿足 UsernamePasswordAuthenticationFilter 類中定義的登入路徑(“/login”)和請求方法(POST)然後會獲取表單提交過來的使用者名稱、密碼一系列的邏輯判斷完畢後跳轉到 FilterSecurityInterceptor 過濾器,最終才會到我們專案中具體的Controller中的具體方法,至此,Security的基本登入邏輯完畢。:-)