Filter、Interceptor、AOP應(yīng)如何選擇?

前言

上一篇中,我們?cè)谶^(guò)濾器、攔截器中,結(jié)合 Redis 加入冪等性校驗(yàn)功能;

在最后的時(shí)候,留下了一個(gè)問(wèn)題,就是為什么這樣做,而不用AOP ?

今天我們就來(lái)探討下。

過(guò)濾器

過(guò)濾器可以攔截到方法的請(qǐng)求和響應(yīng)(ServletRequest request, ServletResponse response),并對(duì)請(qǐng)求響應(yīng)做出過(guò)濾操作;

過(guò)濾器依賴(lài)于servlet容器。在實(shí)現(xiàn)上,基于函數(shù)回調(diào),它可以對(duì)幾乎所有請(qǐng)求進(jìn)行過(guò)濾,一個(gè)過(guò)濾器實(shí)例只能在容器初始化時(shí)調(diào)用一次;

使用Filter完整的流程是:Filter對(duì)用戶(hù)請(qǐng)求進(jìn)行預(yù)處理,接著將請(qǐng)求交給Servlet進(jìn)行預(yù)處理并生成響應(yīng),最后Filter再對(duì)服務(wù)器響應(yīng)進(jìn)行后處理;

過(guò)濾器的作用(摘自JavaDoc)

Examples that have been identified for this design are

  1. Authentication Filters, 即用戶(hù)訪問(wèn)權(quán)限過(guò)濾
  2. Logging and Auditing Filters, 日志過(guò)濾,可以記錄特殊用戶(hù)的特殊請(qǐng)求的記錄等
  3. Image conversion Filters
  4. Data compression Filters
  5. Encryption Filters
  6. Tokenizing Filters
  7. Filters that trigger resource access events
  8. XSL/T filters
  9. Mime-type chain Filter

攔截器

攔截器,在AOP(Aspect-Oriented Programming)中用于在某個(gè)方法或字段被訪問(wèn)之前,進(jìn)行攔截,然后在之前或之后加入某些操作;

攔截器的作用

日志記錄:記錄請(qǐng)求信息的日志,以便進(jìn)行信息監(jiān)控、信息統(tǒng)計(jì)、計(jì)算PV(Page View)等
權(quán)限檢查:如登錄檢測(cè),進(jìn)入處理器檢測(cè)檢測(cè)是否登錄
性能監(jiān)控:通過(guò)攔截器在進(jìn)入處理器之前記錄開(kāi)始時(shí)間,在處理完后記錄結(jié)束時(shí)間,從而得到該請(qǐng)求的處理時(shí)間。(反向代理,如apache也可以自動(dòng)記錄);
通用行為:讀取cookie得到用戶(hù)信息并將用戶(hù)對(duì)象放入請(qǐng)求,從而方便后續(xù)流程使用,還有如提取Locale、Theme信息等,只要是多個(gè)處理器都需要的即可使用攔截器實(shí)現(xiàn)

切面

相比過(guò)濾器,攔截器能夠知道用戶(hù)發(fā)出的請(qǐng)求最終被哪個(gè)控制器處理,但是攔截器還有一個(gè)明顯的不足,即不能夠獲取request的參數(shù)以及控制器處理之后的response,所以就有了切片的用武之地了;

過(guò)濾器、攔截器以及切片的調(diào)用順序

Filter->Intercepto->Aspect->Controller

過(guò)濾器和攔截器的區(qū)別

Filter Interceptor
實(shí)現(xiàn)方式 過(guò)濾器是基于函數(shù)回調(diào) 基于Java的反射機(jī)制的
規(guī)范 Servlet規(guī)范 Spring規(guī)范
作用范圍 對(duì)幾乎所有的請(qǐng)求起作用 只對(duì)action請(qǐng)求起作用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容