天天看點

[3天速成Spring Security] - 02 Spring過濾器Filter及過濾器鍊Filter ChainSpring FiltersFilter Chain

本文主要用于快速介紹Spring Filters及Filter Chain的相關概念,因為Filter是Spring Security用于實作認證和授權的底層實作方式

Spring Filters

Filter介紹

  • 任何Spring Web應用本質上隻是一個servlet
  • Security Filter在HTTP請求到達你的Controller之前過濾每一個傳入的HTTP請求

Security Filter實作流程

[3天速成Spring Security] - 02 Spring過濾器Filter及過濾器鍊Filter ChainSpring FiltersFilter Chain
  • 未認證是401
  • 未授權是403

過濾器示例代碼

[3天速成Spring Security] - 02 Spring過濾器Filter及過濾器鍊Filter ChainSpring FiltersFilter Chain
  • 注意:上述是通過一個過濾器實作了 提取使用者名密碼 / 驗證使用者名密碼 / 校驗授權 等内容,而Spring Security實際是使用多個過濾器形成過濾器鍊進行處理

Filter Chain

Spring Security 是通過多個Filter形成過濾器鍊進行的認證和授權

[3天速成Spring Security] - 02 Spring過濾器Filter及過濾器鍊Filter ChainSpring FiltersFilter Chain

Spring Security中常見的内建過濾器

  • BasicAuthenticationFilter - 在請求中找一個Basic Auth HTTP頭,如果找到,則嘗試用該頭中的使用者名和密碼驗證使用者
  • UsernamePasswordAuthenticationFilter - 如果在請求參數或者POST的Request Body中找到使用者名/密碼,則嘗試用這些值對使用者進行身份驗證
  • DefaultLoginPageGeneratingFilter - 預設登入頁面生成過濾器。用于生成一個登入頁面,如果你沒有明确地禁用這個功能,那麼就會生成一個登入頁面。這就是為什麼在啟用Spring Security時,會得到一個預設登入頁面的原因
  • DefaultLogoutPageGeneratingFilter - 如果沒有禁用該功能,則會生成一個登出頁面
  • FilterSecurityInterceptor - 過濾安全攔截器。用于授權邏輯