SpringSecurity 過濾器解析

2021-08-10 04:56:27 字數 3209 閱讀 4758

圖 11.1. auto-config='true'時的過濾器列表

圖 11.2. org.springframework.security.context.httpsessioncontextintegrationfilter

位於過濾器頂端,第乙個起作用的過濾器。

用途一,在執行其他過濾器之前,率先判斷使用者的session中是否已經存在乙個securitycontext了。如果存在,就把securitycontext拿出來,放到securitycontextholder中,供spring security的其他部分使用。如果不存在,就建立乙個securitycontext出來,還是放到securitycontextholder中,供spring security的其他部分使用。

用途二,在所有過濾器執行完畢後,清空securitycontextholder,因為securitycontextholder是基於threadlocal的,如果在操作完成後清空threadlocal,會受到伺服器的執行緒池機制的影響。

圖 11.3. org.springframework.security.ui.logout.logoutfilter

只處理登出請求,預設為/j_spring_security_logout。

用途是在使用者傳送登出請求時,銷毀使用者session,清空securitycontextholder,然後重定向到登出成功頁面。可以與rememberme之類的機制結合,在登出的同時清空使用者cookie。

處理form登陸的過濾器,與form登陸有關的所有操作都是在此進行的。

預設情況下只處理/j_spring_security_check請求,這個請求應該是使用者使用form登陸後的提交位址,form所需的其他引數可以參考:???。

此過濾器執行的基本操作時,通過使用者名稱和密碼判斷使用者是否有效,如果登入成功就跳轉到成功頁面(可能是登陸之前訪問的受保護頁面,也可能是預設的成功頁面),如果登入失敗,就跳轉到失敗頁面。

此過濾器用來生成乙個預設的登入頁面,預設的訪問位址為/spring_security_login,這個預設的登入頁面雖然支援使用者輸入使用者名稱,密碼,也支援rememberme功能,但是因為太難看了,只能是在演示時做個樣子,不可能直接用在實際專案中。

如果想自定義登陸頁面,可以參考:第 4 章 自定義登陸頁面。

圖 11.6. org.springframework.security.ui.basicauth.basicprocessingfilter

此過濾器用於進行basic驗證,功能與authenticationprocessingfilter類似,只是驗證的方式不同。有關basic驗證的詳細情況,我們會在後面的章節中詳細介紹。

有關basic驗證的詳細資訊,可以參考:第 14 章 basic認證。

此過濾器用來包裝客戶的請求。目的是在原始請求的基礎上,為後續程式提供一些額外的資料。比如getremoteuser()時直接返回當前登陸的使用者名稱之類的。

圖 11.8. org.springframework.security.ui.rememberme.remembermeprocessingfilter

此過濾器實現rememberme功能,當使用者cookie中存在rememberme的標記,此過濾器會根據標記自動實現使用者登陸,並建立securitycontext,授予對應的許可權。

有關rememberme功能的詳細資訊,可以參考:第 16 章 自動登入。

圖 11.9. org.springframework.security.providers.anonymous.anonymousprocessingfilter

為了保證操作統一性,當使用者沒有登陸時,預設為使用者分配匿名使用者的許可權。

有關匿名登入功能的詳細資訊,可以參考:第 17 章 匿名登入。

圖 11.10. org.springframework.security.ui.exceptiontranslationfilter

此過濾器的作用是處理中filtersecurityinterceptor丟擲的異常,然後將請求重定向到對應頁面,或返回對應的響應錯誤**。

圖 11.11. org.springframework.security.ui.sessionfixationprotectionfilter

防禦會話偽造攻擊。有關防禦會話偽造的詳細資訊,可以參考:第 18 章 防禦會話偽造。

圖 11.12. org.springframework.security.intercept.web.filtersecurityinterceptor

使用者的許可權控制都包含在這個過濾器中。

功能一:如果使用者尚未登陸,則丟擲authenticationcredentialsnotfoundexception「尚未認證異常」。

功能二:如果使用者已登入,但是沒有訪問當前資源的許可權,則丟擲accessdeniedexception「拒絕訪問異常」。

功能三:如果使用者已登入,也具有訪問當前資源的許可權,則放行。

SpringSecurity加密和匹配過程分析

demoimpo rt org.springframework.security.crypto.bcrypt.bcryptpasswordencoder public class bcryptpasswordencoderutils public static void main string ar...

spring security 安全框架

本文 http itblood.com spring security security framework.html 安全常識 acegi介紹 以宣告式方式為基於spring的web應用新增認證和授權控制 acegi體系結構 認證管理器 訪問控制管理器。認證 authenticationproce...

SpringSecurity認證流程

在之前的文章 springboot spring security 基本使用及個性化登入配置 中對springsecurity進行了簡單的使用介紹,基本上都是對於介面的介紹以及功能的實現。這一篇文章嘗試從原始碼的角度來上對使用者認證流程做乙個簡單的分析。在具體分析之前,我們可以先看看springse...