Ⅰ Spring Security自定義攔截器
HttpSecurity實際上就是在配置Spring security的過濾器鏈,比如:CSRF,CORS,表單登錄等,每個配置器對應一個過濾器,可以通過HttpSecurity配置過濾器的行為。
甚至可以像CRSF一樣直接關閉過濾器,例如:SessionManagement
Spring Security通過SessionManagermentConfigurer來配置SessionManagerment的行為,與SessionManagermentConfigurer類似的配置器還有CorsConfigurer,RememberMeConfigurer等,他們都實現了SecurityConfigurer的標准介面。
SessionManagementConfigurer是在configure方法中將最終的SessionManagementFilter插入過濾器鏈來實現會話管理的。
除了Spring security提供的過濾器外,我們還可以添加自己的過濾器以實現更多的功能,這些都是可以在HttpSecurity中實現
雖然Spring Security 的過濾器鏈對過濾器沒有特殊要求,只要繼承了Filter即可,但是在Spring體系中,推薦使用OnePerRequestFilter來實現,它可以確保一次請求只會通過一次該過濾器(Filter實際並不能保證這一點)
其實關於這個自定義Filter,我個人感覺有個比較danteng的地方,比如:我們在實現圖片驗證碼或者一些其他的登錄相關的驗證碼的時候,我們可能會做到在賬號跟密碼驗證了之後對這個驗證碼進行驗證,然後我就必須有個這種操作: http.addFilterBefore(filter,.class); 因為如果驗證碼驗證錯誤,我們就不需要也沒必要再往後驗證了,所以我們得知道我們定義的這個驗證碼過濾器得在什麼時候驗證在哪個過濾器之前或者之後驗證,那麼問題來了,或許我們並不知道Spring Security給我們提供了哪些或者什麼樣的過濾器,我們得去記住這些過濾器,這就有點不友好了。在HttpSecurityBuilder介面中,有一段這樣的注釋:
非常爽眼~