首頁 > 軟體

Idea中如何檢視SpringSecurity各Filter資訊

2023-01-04 14:00:31

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進行程式碼過濾,方便又快捷。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。 


IT145.com E-mail:sddin#qq.com