Idea中如何查看SpringSecurity各Filter信息
Filter和Filter Chain
SpringSecurity的認證邏輯是通過Filter Chain實現的,一個項目中Filter是鏈式執行,其中一環校驗不通過,則可終止後續Filter以及Api的調用。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
在Filter的實現類中,doFilter方法裡調用chain的doFilter方法,表示當前過濾器通過,繼續FilterChain的下一個Filter
chain.doFilter(request, response);
Idea Evalute Expression
下面通過一個簡單的項目,來查看一下Spring Security中的Filter
創建工程
通過向導創建一個springBoot工程,引入web和security依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
啟動類
@SpringBootApplication public class SpringSecurityLearningApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringSecurityLearningApplication.class, args); System.out.println(); } }
SpringApplication.run()的返回值就是Spring容器,ConfigurableApplicationContext是ApplicationContext的子類。
System.out.println();是為瞭便於打斷點,查看applicationContext的信息。
debug啟動服務
evaluate expression
通過郵件選Evaluate Expression或點擊debugger欄位上是圖標
點擊輸入框右側的雙向箭頭,切換為Code fragment模式,個人覺得這個更好用
輸入以下內容,獲取容器中的FilterChainProxy對象,再點擊窗口下側的Evaluate
result中的filterChains中的filters就是Filter鏈信息,其中,UsernamePasswordAuthenticationFilter、ExceptionTranslationFilter
以及FilterSecurityInterceptor為springSecurity認證相關的Filter。
在平時debug時,如果list中的數據很多,憑肉眼去找肯定很難找,通過右鍵對象出來的filter很難用,可以通過Evaluate進行代碼過濾,方便又快捷。
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot詳細講解如何創建及刷新Spring容器bean
- SpringBoot自動配置實現的詳細步驟
- SpringBootAdmin+actuator實現服務監控
- SpringBoot項目實現關閉數據庫配置和springSecurity
- SpringBoot深入探究@Conditional條件裝配的使用