Idea中如何查看SpringSecurity各Filter信息
Filter和Filter Chain
SpringSecurity的認(rèn)證邏輯是通過(guò)Filter Chain實(shí)現(xiàn)的,一個(gè)項(xiàng)目中Filter是鏈?zhǔn)綀?zhí)行,其中一環(huán)校驗(yàn)不通過(guò),則可終止后續(xù)Filter以及Api的調(diào)用。
? ? public void doFilter(ServletRequest request, ServletResponse response, ? ? ? ? ? ? FilterChain chain) throws IOException, ServletException;
在Filter的實(shí)現(xiàn)類中,doFilter方法里調(diào)用chain的doFilter方法,表示當(dāng)前過(guò)濾器通過(guò),繼續(xù)FilterChain的下一個(gè)Filter
chain.doFilter(request, response);
Idea Evalute Expression
下面通過(guò)一個(gè)簡(jiǎn)單的項(xiàng)目,來(lái)查看一下Spring Security中的Filter
創(chuàng)建工程
通過(guò)向?qū)?chuàng)建一個(gè)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>
啟動(dòng)類
@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();是為了便于打斷點(diǎn),查看applicationContext的信息。
debug啟動(dòng)服務(wù)

evaluate expression
通過(guò)郵件選Evaluate Expression或點(diǎn)擊debugger欄位上是圖標(biāo)

點(diǎn)擊輸入框右側(cè)的雙向箭頭,切換為Code fragment模式,個(gè)人覺(jué)得這個(gè)更好用
輸入以下內(nèi)容,獲取容器中的FilterChainProxy對(duì)象,再點(diǎn)擊窗口下側(cè)的Evaluate

result中的filterChains中的filters就是Filter鏈信息,其中,UsernamePasswordAuthenticationFilter、ExceptionTranslationFilter
以及FilterSecurityInterceptor為springSecurity認(rèn)證相關(guān)的Filter。
在平時(shí)debug時(shí),如果list中的數(shù)據(jù)很多,憑肉眼去找肯定很難找,通過(guò)右鍵對(duì)象出來(lái)的filter很難用,可以通過(guò)Evaluate進(jìn)行代碼過(guò)濾,方便又快捷。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java各種鎖在工作中使用場(chǎng)景和細(xì)節(jié)經(jīng)驗(yàn)總結(jié)
本章主要說(shuō)一說(shuō)鎖在工作中的使用場(chǎng)景,主要以 synchronized 和 CountDownLatch 為例,會(huì)分別描述一下這兩種鎖的使用場(chǎng)景和姿勢(shì)2022-03-03
JAVA 數(shù)據(jù)結(jié)構(gòu)之Queue處理實(shí)例代碼
這篇文章主要介紹了JAVA 數(shù)據(jù)結(jié)構(gòu)之Queue處理實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
JAVA如何轉(zhuǎn)換樹(shù)結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例
這篇文章主要介紹了JAVA如何轉(zhuǎn)換樹(shù)結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java更新調(diào)度器(update scheduler)的使用詳解
Java更新調(diào)度器是Java中的一個(gè)特性,可以自動(dòng)化Java應(yīng)用程序的更新過(guò)程,它提供了一種方便的方式來(lái)安排Java應(yīng)用程序的更新,確保其與最新的功能、錯(cuò)誤修復(fù)和安全補(bǔ)丁保持同步,本文將深入介紹如何使用Java更新調(diào)度器,并解釋它對(duì)Java開(kāi)發(fā)人員和用戶的好處2023-11-11
整理Java的MyBatis框架中一些重要的功能及基本使用示例
這篇文章主要介紹了Java的MyBatis框架中一些重要的功能及基本使用示例整理,MyBatis可以幫助Java程序進(jìn)行強(qiáng)大的數(shù)據(jù)庫(kù)操作,需要的朋友可以參考下2016-04-04
Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用
Spring?Boot2.6.0為我們帶來(lái)很多好用的新特性/改進(jìn),這篇文章主要給大家介紹了關(guān)于Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02

