Spring security學習筆記四

2021-06-22 01:33:56 字數 3295 閱讀 7345

一、理解安全過濾器鏈

spring security的web架構是完全基於標準的servlet過濾器的。 它沒有在內部使用servlet或任何其他基於servlet的框架(比如spring mvc), 所以它沒有與任何特定的web技術強行關聯。 它只管處理httpservletrequest 和httpservletresponse,不關心請求時來自瀏覽器,web服務客戶端,還是乙個ajax應用。

spring security 一啟動就會包含一批負責各種安全管理的過濾器,這些過濾器組成過濾器鏈。

在web中配置

剛才說到spring security需要一些過濾器,這些過濾器如果在web.xml中配置的話,配置起來就很繁瑣了,這些過濾器還必須按照順序來配置. 所以為了方便,就只在web.xml檔案中配置了乙個**過濾器,它就相當於是乙個入口,web容器啟動的時候,由它到spring容器中啟動spring security需要的過濾器鏈。

事實上我們並沒有這樣配置,我們一般都用自動配置,如果不想用自動配置,可以按照上面配置然後自己寫過濾器類。

自動配置:

spring security提供的過濾器的作用

第乙個起作用的過濾器,首先判斷使用者的session中是否已經存在乙個securitycontext了,如果存在,就把securitycontext拿出來,放到securitycontextholder中,拱spring security其他部分使用。如果不存在,就建立乙個securitycontext出來,還是放到securitycontextholder中,拱其它部分使用。

在所有過濾器執行完畢後,清空securitycontextholde。

2、logoutfilter

只處理登出請求,預設為/j_spring_security_logout . 在使用者傳送登出請求的時候,銷毀使用者session,清空securitycontextholder,然後重定向到登出成功頁面。

3、authenticationprocessingfilter

處理 form 登陸的過濾器,與form 登陸有關的所有操作都是在此進行的。預設情況下只處理/j_spring_security_check 請求,這個請求應該是使用者使用form登陸後的提交位址

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

4、defaultloginpagegeneratingfilter

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

5、basicprocessingfilter

此過濾器用於進行 basic 驗證,功能與authenticationprocessingfilter 類似,只是驗證的方式不同

6、securitycontextholderawarerequestfilter

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

7、remembermeprocessingfilter

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

8、anonymousprocessingfilter

為了保證操作統一性,當使用者沒有登陸時,預設為使用者分配匿名使用者的許可權。有關匿名登入功能的詳細資訊

9、exceptiontranslationfilte

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

10、sessionfixationprotectionfilter

防禦會話偽造攻擊。

11、filtersecurityinterceptor

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

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

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

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

二、管理回話

乙個使用者正確的登入了系統,並沒有使用系統提供的」退出」功能,而是直接關掉瀏覽器,或者長時間不適用體統,tomcat預設情況下會儲存session 30分鐘,30分鐘後,會話就會過期。

我們可以配置spring security 檢測失效的session id,並把使用者**到對應的url上,我們可以通過配置 session-management元素

在頁面中提供「退出」鏈結

spring security在啟動的時候,啟動了乙個過濾器logoutfilter,它能夠接收請求/j_spring_security_logout ,此時可以將當前登入的使用者「踢」出系統

在頁面中提供「退出」鏈結

spring security在啟動的時候,啟動了乙個過濾器logoutfilter,它能夠接收請求/j_spring_security_logout

同步會話控制

多個使用者不能使用同乙個賬號同時登陸系統。為了實現這個功能,我們首先要在web.xml檔案中新增乙個***,這個***會在session 建立和銷毀的時候通知spring security。

第二次登入會讓第一次登入失效。

通常我們更想防止第二次登入

Spring security 邊做邊學

之前遇到乙個需求,在執行時決定允許訪問的url的角色。而不是在xml裡配置。解決方案是實現自己的voter類。現在遇到另乙個需求,應用有2個不同的登入頁面。比如 普通使用者 通過 demo user login.jsp,而管理員 通過 demo admin login.jsp 登入系統。之後,進入不...

spring security2配置檔案學習小結

使用命名空間,主要分為3個部分 a.註冊過濾器鏈,配置表單登陸,登出等 b.註冊自定義的安全認證管理器 c.註冊自定義的授權過濾器 2.a.元素會建立乙個filterchainproxy和filter使用的bean。以前常常出現的因為filter順序不正確產生的問題不會再出現了,現在這些過濾器的位置...

spring security 安全框架

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