程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 圖解Spring Security默認使用的過濾器

圖解Spring Security默認使用的過濾器

編輯:關於JAVA

首先看一下auto-config="true"的情況下,默認會用到哪些過濾器。

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

下面開始對這些過濾器的功能一一道來。

7.1.HttpSessionContextIntegrationFilter

圖 7.2.org.springframework.security.context.HttpSessionContextIntegrationFilter

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

用途一,在執行其他過濾器之前,率先判斷用戶的session中是否已經存在一個SecurityContext了。如果存在,就把 SecurityContext拿出來,放到SecurityContextHolder中,供Spring Security的其他部分使用。如果不存在,就創建一個SecurityContext出來,還是放到SecurityContextHolder中,供Spring Security的其他部分使用。

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

7.2.LogoutFilter

圖 7.3.org.springframework.security.ui.logout.LogoutFilter

只處理注銷請求,默認為/j_spring_security_logout。

用途是在用戶發送注銷請求時,銷毀用戶session,清空SecurityContextHolder,然後重定向到注銷成功頁面。可以與rememberMe之類的機制結合,在注銷的同時清空用戶cookie。

7.3.AuthenticationProcessingFilter

圖 7.4.org.springframework.security.ui.webapp.AuthenticationProcessingFilter

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

默認情況下只處理/j_spring_security_check請求,這個請求應該是用戶使用form登陸後的提交地址,form所需的其他參數可以參考:第 4.3 節 “登陸頁面中的參數配置” 。

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

7.4.DefaultLoginPageGeneratingFilter

圖 7.5.org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter

此過濾器用來生成一個默認的登錄頁面,默認的訪問地址為/spring_security_login,這個默認的登錄頁面雖然支持用戶輸入用戶名,密碼,也支持rememberMe功能,但是因為太難看了,只能是在演示時做個樣子,不可能直接用在實際項目中。

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

7.5.BasicProcessingFilter

圖 7.6.org.springframework.security.ui.basicauth.BasicProcessingFilter

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

7.6.SecurityContextHolderAwareRequestFilter

圖 7.7.org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter

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

7.7.RememberMeProcessingFilter

圖 7.8.org.springframework.security.ui.rememberme.RememberMeProcessingFilter

此過濾器實現RememberMe功能,當用戶cookie中存在rememberMe的標記,此過濾器會根據標記自動實現用戶登陸,並創建SecurityContext,授予對應的權限。

7.8.AnonymousProcessingFilter

圖 7.9.org.springframework.security.providers.anonymous.AnonymousProcessingFilter

為了保證操作統一性,當用戶沒有登陸時,默認為用戶分配匿名用戶的權限。

7.9.ExceptionTranslationFilter

圖 7.10.org.springframework.security.ui.ExceptionTranslationFilter

此過濾器的作用是處理中FilterSecurityInterceptor拋出的異常,然後將請求重定向到對應頁面,或返回對應的響應錯誤代碼。

7.10.SessionFixationProtectionFilter

圖 7.11.org.springframework.security.ui.SessionFixationProtectionFilter

防御session固化攻擊。

7.11.FilterSecurityInterceptor

圖 7.12.org.springframework.security.intercept.web.FilterSecurityInterceptor

用戶的權限控制都包含在這個過濾器中。

功能一:如果用戶尚未登陸,則拋出AuthenticationCredentialsNotFoundException“尚未認證異常”。

功能二:如果用戶已登錄,但是沒有訪問當前資源的權限,則拋出AccessDeniedException“拒絕訪問異常”。

功能三:如果用戶已登錄,也具有訪問當前資源的權限,則放行。

至此,我們完全展示了默認情況下Spring Security中使用到的過濾器,以及每個過濾器的應用場景和顯示功能,下面我們會對這些過濾器的配置和用法進行逐一介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved