Alias | Filter Class | Namespace Element or Attribute |
---|---|---|
CHANNEL_FILTER |
|
|
SECURITY_CONTEXT_FILTER |
|
|
CONCURRENT_SESSION_FILTER |
|
|
HEADERS_FILTER |
|
|
CSRF_FILTER |
|
|
LOGOUT_FILTER |
|
|
X509_FILTER |
|
|
PRE_AUTH_FILTER |
|
N/A |
CAS_FILTER |
|
N/A |
FORM_LOGIN_FILTER |
|
|
BASIC_AUTH_FILTER |
|
|
SERVLET_API_SUPPORT_FILTER |
|
|
JAAS_API_SUPPORT_FILTER |
|
|
REMEMBER_ME_FILTER |
|
|
ANONYMOUS_FILTER |
|
|
SESSION_MANAGEMENT_FILTER |
|
|
EXCEPTION_TRANSLATION_FILTER |
|
|
FILTER_SECURITY_INTERCEPTOR |
|
|
SWITCH_USER_FILTER |
|
N/A |
每個過濾器的作用:
1、SecurityContextPersistenceFilter(SECURITY_CONTEXT_FILTER):請求進來時,創建SecurityContext;請求結束時,清空SecurityContextHolder。
延伸閱讀:SecurityContextHolder、SecurityContext、Authentication的區別?
在SecurityContextHolder中我們保存了當前與應用交互的principal數據,Spring Security使用一個Authentication對象來保存和展示這些數據。你不需要自己手工創建一個Authentication對象,而且查詢這個對象也相當的簡單,
getContext()方法返回的對象是SecurityContext接口的實例,這就是保存在ThreadLocal局部變量中的對象,你可以使用下面的代碼(在你的應用的任意位置)獲取當前認證用戶的姓名信息:
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { String username = ((UserDetails)principal).getUsername(); } else { String username = principal.toString(); }
2、CsrfFilter (CSRF_FILTER):在spring4這個版本中被默認開啟的一個過濾器,用於防止csrf攻擊
3、LogoutFilter (LOGOUT_FILTER):處理注銷請求。參考 https://blog.csdn.net/py_xin/article/details/52634880
4、CasAuthenticationFilter(CAS_FILTER):
5、UsernamePasswordAuthenticationFilter(FORM_LOGIN_FILTER):表單提交了username和password,被封裝成token進行一系列的認證,便是主要通過這個過濾器完成的,在表單認證的方法中,這是最最關鍵的過濾器。
6、FilterSecurityInterceptor(FILTER_SECURITY_INTERCEPTOR) : 這個過濾器決定了訪問特定路徑應該具備的權限,訪問的用戶的角色,權限是什么?訪問的路徑需要什么樣的角色和權限?這些判斷和處理都是由該類進行的。
7、與CAS集成,參考:https://blog.csdn.net/zh350229319/article/details/50517921
8、自定義攔截器,參考:https://blog.csdn.net/chaozhi_guo/article/details/46365735