欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Boot項目中如何定制攔截器

錢諍諍2年前21瀏覽0評論

Boot項目中如何定制攔截器?

SpringBoot中可以使用Intercept和Filter兩種方式來實現攔截器。本文主要給大家講解一下這兩種方式的實現方式以及Filter和Intercept的區別。

Intercept實現方式

先定義一個攔截器類,需要繼承HandlerInterceptor接口,點擊這個接口可以看到有三個方法可以被實現,之所以說可以被實現,因為這三個方法被default修飾了,也就是非必須實現,接口里面已經有了這個接口的默認實現,這是java8的新特性。

所以當我們創建一個自定義的攔截器類的時候,是可以選擇是否去實現其中的方法,比如大多數的情況下,我們只需要實現preHandler這個方法就可以滿足我們的業務了,那么postHandle和afterCompletion方法就不需要實現了:

定義好攔截器類后,需要把這個攔截器加載到攔截器鏈中,所以我們需要WebConfig類,這個類需要實現WebMvcConfigurer接口類:

ok,一個攔截器就添加好了~

WebMvcConfigurer的作用就是為我們實現了通用的攔截器,我們如果想添加一些業務相關的攔截器,那么就實現這個接口類,然后像上面這樣操作即可。

Filter實現方式

Filter實現還是之前的Servlet方式,先定義一個TestFilter類繼承Filter接口:

然后再定義一個FilterConf類,把這個TestFilter注冊到過濾器鏈中:

大家可以看到這里面有一個FilterRegistrationBean類,這個類就是SpringBoot為大家提供的過濾器,只要把你自定義的Filter添加到這里來就可以了,大家也可以自己去實現以下,然后點擊上面這些方法看看FilterRegistrationBean為我們做了哪些事情。

如果有多個過濾器怎么辦呢?

這個方法就是設置過濾器的優先級,可以根據業務需要定制自己的攔截器的執行順序。

Filter和Intercept的區別

上面就是為大家帶來的在SpringBoot中實現攔截器的兩種方式,通常我們在做API項目的時候,可以在接口請求之前校驗前端傳遞過來的token是否合法,也可以在這里設置是否允許跨域。跨域的知識大家有興趣也可以學習一下,還是很有意思的。

這里再和大家一起學習下過濾器和攔截器的區別,面試中也經常會有這樣的面試題:

Filter是基于函數回調,而Intercept是基于java的反射機制;

Filter是servlet的技術,而Intercept是注冊在spring容器中,它不依賴servlet容器

Filter可以攔截幾乎所有的請求(包含對靜態資源的請求),而Intercept只攔截action請求(不攔截靜態資源請求)

Filter不能訪問action上下文及值棧里的對象,而Intercept都是可以的;

Intercept可以獲取spring容器里的對象,而Filter是不行的;

Intercept在action的生命周期內是可以多次調用,而Filter只在容器初始化時被調用一次。

了解了以上的區別之后,相信大家在實際開發使用過程中便可以根據不同的業務場景具體是選擇Filter還是Intercept就能心中有數了。

以上就是我為大家帶來的如何在SpringBoot中定制攔截器的相關知識,如有問題大家可以隨時私信我。

我是【java架構設計】,歡迎大家評論、點贊!關注我,持續為您提供科技領域優質內容!

java跨域訪問,Boot項目中如何定制攔截器