spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...
眾所周知的Spring Boot是很優(yōu)秀的框架,它的出現(xiàn)簡化了新Spring應(yīng)用的初始搭建以及開發(fā)過程,大大減少了代碼量,目前已被大多數(shù)企業(yè)認(rèn)可和使用。這個專欄將對Spring Boot框架從淺入深,從實戰(zhàn)到進(jìn)階,不但我們要懂得如何去使用,還要去剖析框架源碼,學(xué)習(xí)其優(yōu)秀的設(shè)計思想。
一、過濾器
過濾器是處于客戶端與服務(wù)器資源文件之間的一道過濾網(wǎng),在訪問資源文件之前,通過一系列的過濾器對請求進(jìn)行修改、判斷等,把不符合規(guī)則的請求在中途攔截或修改。也可以對響應(yīng)進(jìn)行過濾,攔截或修改響應(yīng)。
1、自定義一個TimeFilter類
2、配置方式
- @WebFilter注解的urlPatterns屬性配置了哪些請求可以進(jìn)入該過濾器,/*表示所有請求。
- 除了在過濾器類上加注解外,我們也可以通過FilterRegistrationBean來注冊過濾器。定義一個TimeFilterConfig類,加上@Configuration注解表明其為配置類,然后通過FilterRegistrationBean來注冊過濾器。
3、項目演示
控制臺輸出
- 【過濾器】開始執(zhí)行
- Controller:Hello World!
- 【過濾器】耗時:26ms
- 【過濾器】結(jié)束執(zhí)行
二、攔截器
攔截器,是面向切面編程(AOP,Aspect Oriented Program)的。就是在Service或者一個方法前調(diào)用一個方法,或者在方法后調(diào)用一個方法。比如動態(tài)代理就是攔截器的簡單實現(xiàn),在調(diào)用方法前打印出字符串(或者做其它業(yè)務(wù)邏輯的操作),也可以在調(diào)用方法后打印出字符串,甚至在拋出異常的時候做業(yè)務(wù)邏輯的操作。
1、定義一個TimeInterceptor類
2、在TimeInterceptorConfig中通過InterceptorRegistry注冊過濾器。
3、項目演示
控制臺輸出
- 【攔截器】處理前
- com.boot.filter.controller.HelloController
- Controller:Hello World!
- 【攔截器】處理中
- 【攔截器】耗時:22ms
- 【攔截器】處理后
- 【攔截器】耗時:22ms
三、過濾器和攔截器的區(qū)別
主要區(qū)別:
本質(zhì)區(qū)別:
從靈活性上說攔截器功能更強(qiáng)大些,Filter能做的事情它都能做,而且可以在請求前,請求后執(zhí)行,比較靈活。Filter主要是針對URL地址做一個編碼的事情、過濾掉沒用的參數(shù)、安全校驗,其他的還是建議用interceptor。
執(zhí)行順序:
- 【過濾器】開始執(zhí)行
- 【攔截器】處理前
- com.boot.filter.controller.HelloController
- Controller:Hello World!
- 【攔截器】處理中
- 【攔截器】耗時:20ms
- 【攔截器】處理后
- 【攔截器】耗時:20ms
- 【過濾器】耗時:27ms
- 【過濾器】結(jié)束執(zhí)行
過濾前-----攔截前-----Action處理-----攔截后-----過濾后。
總結(jié)
以上是生活随笔為你收集整理的spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.6cmd中代码_Mysql
- 下一篇: mybatis if test 用法_S