Spring Security常用攔截器
阿新 • • 發佈:2018-04-20
iges 共享 persist tegra use nproc 請求 dap ember
- 安全攔截器
- 認證管理器
- 訪問決策管理
- 運行身份管理器
- 認證方式:
- Basic Digest X.509 LDAP Form
- 常用權限攔截器
- SecurityContextPersistenceFilter
- 以前是HttpSesstionContextIntegrationFilter,位於過濾器的頂端,是第一個起作用的過濾器
- 第一個用途:在執行其他過濾器之前,率先判斷用戶的session是否已經存在了一個spring security上下文的securityContext,如果存在,就把securityContext拿出來,放在securityContextHolder中,供security的其他部分使用。如果不存在,就創建一個securityContext出來,放在securityContextHolder中,供security的其他部分使用。
- 第二個用途:在所有過濾器執行完畢後,清空securityContextHolder中的內容,因為securityContextHolder是基於ThreadLocal的,如果不清空,會受到服務器線程池機制的影響。
- ThreadLocal存放的值是線程內共享的,線程間互斥的,主要用於線程內共享一些數據,避免通過參數來傳遞。這樣處理後,能夠解決實際中的一些並發問題。ThreadLocalMap是ThreadLocal的一個內部類,是不對外使用的。當使用ThreadLocal存值時,首先獲取到當前線程對象,然後獲取到當前線程本地對象,本地變量map,最後將當前使用的所有local和傳入的值放在map中。也就是說ThreadLocalMap中的key是ThreadLocal對象。這樣,每個線程都對應一個本地的map,所以,一個線程可以存在多個線程本地變量。
- ThreadLocal是解決線程並發問題的一個很好的思路,通過對每個線程提供一個獨立的變量副本,解決線程並發訪問變量的一個沖突問題
- 當一個線程結束的時候,記得把ThreadLocal裏的變量移除掉remove();
- SecurityContextPersistenceFilter
- LogoutFilter
- 只處理註銷請求。在用戶發送註銷請求時,銷毀用戶的session,清空securityContextHolder,重定向到註銷成功頁面
- AbstractAuthenticationProcessingFilter
- 處理form登錄的過濾器,與form登錄有關的操作都在此進行。
- DefaultLoginPageGeneratingFilter
- 用來生成一個默認的登錄頁面,默認的訪問地址為spring_security_login,這個登錄頁面雖然支持用戶輸入用戶名密碼,也支持remember me等功能,但是因為太難看了,只能在演示時做個樣子,不能直接在實際項目中使用
- BasicAutenticationFilter
- 用來進行basic驗證
- SecurityContextHolderAwareRequestFilter
- 用來包裝客戶的請求,目的是在原來請求的基礎上,為後續程序提供一些額外的數據,比如getRomoteUser時,直接返回當前登錄的用戶名
- RememberMeAuthenticationFilter
- 實現Remember me功能,當用戶cookie中存在remember me標記時,它會根據標記自動實現用戶登錄,並創建securityContext,授予對應的權限。spring security中的remember me依賴cookie實現,用戶在登錄時選擇remember me,系統就會在登錄成功後為用戶生成一個唯一的標識,並將這個標識保存進cookie中,我們可以通過瀏覽器查看用戶電腦中的cookie
- AnonymousAutenticationFilter
- 當用戶沒有登錄時,默認為用戶分配匿名用戶的權限
- ExceptionTranslationFilter
- 處理filterSecurityInterceptor中拋出的異常,然後將請求重定向到對應頁面,或返回應用的錯誤代碼
- SessionManagementFilter
- 在用戶登錄成功之後,銷毀用戶的當前session,並重新生成一個session
- filterSecurityInterceptor
- 用戶的權限控制都包含在這個過濾器中
- 第一個功能,如果用戶尚未登錄,拋出尚未認證的異常
- 第二個功能,如果用戶已登錄,但是沒有訪問當前資源的權限,會拋出拒絕訪問的異常
- 第三個功能,如果用戶已登錄,也具有訪問當前資源的權限,那麽放行
- FilterChainProxy
- 按照順序調用一組filter,使他們既能完成驗證授權的本職工作,又能相應spring Ioc的功能來很方便地得到其他依賴的資源
Spring Security常用攔截器