1. 程式人生 > >Spring Security常用攔截器

Spring Security常用攔截器

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();
  • 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常用攔截器