1、需求場景
之前也有在文章寫道 “攔截器\過濾器" 的區別,
文章鏈接,在實際開發過程中,我們可能會遇到攔截請求參數的需求,在這我舉個場景。
某一個接口的請求參數都是加密的,而請求參中還有一些跟業務無關的數據,需要剔除。
2、問題產生
那么怎么能夠實現只要和業務有關的數據呢?
首先,我們想到的是通過攔截器,對加密的數據進行解密,然后把解密后的數據重新放到 request 中,request.setAttribute("數據名", 數據);
其實呢,還可以通過 @Aspect 注解,在方法里通過 @before,@around 和 @after 注解的方式來攔截數據,配置起來比攔截器簡單。
疑惑就在這產生了,通過 @Aspect 注解的方式寫的跟攔截器有什么區別呢,他到底是不是攔截器呢?
3、問題總結
3.1、三者不同
@Aspect 注解形式是 AOP 的一種實現。AOP 使用的主要是動態代理 。
過濾器使用的主要是反射 。
攔截器使用的主要是回調 。
3.2、示例分析
前台一個請求過來 ,會先進行過濾器處理,看程序是否受理該請求 。 過濾器放過后 , 程序中的攔截器進行處理 ,處理完后進入 被 AOP 動態代理重新編譯過的主要業務類進行處理 。
通過示例去理解三者的不同 ,所以三者不存在所屬關系。
博客地址:https://www.cnblogs.com/niceyoo