溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring框架的攔截器和過濾器分別有什么作用

發(fā)布時間:2021-06-24 11:34:34 來源:億速云 閱讀:545 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Spring框架的攔截器和過濾器分別有什么作用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

過濾器(Filter):它是依賴于servlet容器。在實現(xiàn)上,基于函數(shù)的回調(diào),它可以對幾乎所有請求進(jìn)行過濾,但是缺點是一個過濾器實例只能在容器初始化時調(diào)用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數(shù)據(jù),比如:在javaweb中,對傳入的request、response提前過濾掉一些信息,或者提前設(shè)置一些參數(shù),然后在傳入servlet或者controll進(jìn)行業(yè)務(wù)邏輯操作。通常用的場景 :在過濾中修改字符編碼、在過濾器中修改HttpServletRequest的一些參數(shù)(XSSfilter自定義過濾器),如:過濾低俗文字,危險字符等。

攔截器(interceptors):它是依賴于web框架,在SpringMVC中就是依賴于SpringMVC框架。在實現(xiàn)上,基于Java的反射機(jī)制,屬于面向切面編程(AOP)的一種運(yùn)用,就是在service或者一個方法前,調(diào)用一個方法,或者在方法后,調(diào)用一個方法,比如動態(tài)代理就是攔截器的簡單實現(xiàn),在調(diào)用方法前打印出字符串(或者做其他邏輯操作),也可以在調(diào)用方法后打印出字符串,甚至在拋出異常的時候做業(yè)務(wù)邏輯的操作。由于攔截器是基于web框架的調(diào)用,因此可以使用Spring的依賴注入進(jìn)行一些業(yè)務(wù)操作,同時一個攔截器實例在一個controller生命周期能可以多次調(diào)用。但是缺點是只能對controller請求進(jìn)行攔截,對其他的一些比如直接訪問靜態(tài)資源的請求則沒辦法進(jìn)行攔截處理。

區(qū)別:

1、使用范圍不同:filter是servlet規(guī)范規(guī)定的,只能用于web程序中,而攔截器既可以用于web程序,也可以用于application,swing程序中。

2、規(guī)范不同:filter是在servlet規(guī)范中定義的,是servlet容器支持的。而攔截器是在Spring容器內(nèi)的,是Spring框架支持的。

3、使用的資源不同:同其他的代碼塊一樣,攔截器也是一個Spring的組件,歸Spring管理,配置在Spring文件中,因此能使用Spring里的任何資源,對象,例如:service對象,數(shù)據(jù)源,事務(wù)管理等,通過Ioc注入到攔截器即可,而Filter則不能

4、深度不同:Filter只在Servlet前后起作用。而攔截器能夠深入到方法前后,異常拋出前后等,因此攔截器的使用具有更大的彈性。所以在Spring框架的程序中,要優(yōu)先使用攔截器。

過濾器的實現(xiàn):

定義一個類實現(xiàn)javax.servlet.Filter接口,該接口提供三個方法

init(FilterConfig config)方法:此方法用于初始化,在容器加載并實例化過濾器的時候自動調(diào)用。容器為此方法傳遞一個FilterConfig對象,其中包含配置信息。

doFilter(servletRequest request,ServletResponse response,F(xiàn)ilterChain chain)方法:此方法是過濾器的核心方法,用于對請求和響應(yīng)進(jìn)行處理。

destiry()方法:此方法用于銷毀過濾器,但容器銷毀過濾器實例之前自動調(diào)用

過濾器的兩種配置方法:

1、注解:

@WebFilter將一個實現(xiàn)了javax.servlet.Filte接口的類定義為過濾器

屬性filterName聲明過濾器的名稱,可選

屬性urlPatterns指定要過濾的URL模式,也可使用屬性value來聲明

2、配置文件

使用<filter>標(biāo)簽在web.xml文件中配置

攔截器的實現(xiàn):

定義一個類,通過實現(xiàn)HandlerInterceptor接口,或繼承HandlerInterceptor接口的實現(xiàn)類來定義,該接口實現(xiàn)三個方法,

preHandle()方法:該方法會在控制器方法前執(zhí)行,其返回值表示是否中斷后續(xù)操作。當(dāng)其返回值為true時,表示繼續(xù)向下執(zhí)行,當(dāng)其返回值為false時,會中斷后續(xù)的所有操作

postHandle()方法:該方法會在控制器方法調(diào)用之后,且解析視圖之前執(zhí)行,可以通過此方法對請求域中的模型和視圖做出進(jìn)一步的修改

afterHandle()方法:該方法會在整個請求完成,即視圖渲染結(jié)束之后執(zhí)行,可以通過此方法實現(xiàn)一些資源清理,記錄日志信息等工作。

攔截器的兩種配置方法:

1、在SpringMVC配置文件中,使用<mvc:interceptors> 標(biāo)簽配置

2、定義一個配置類,繼承WebMvcConfigurerAdapter,重寫addInterceptors方法,對自定義的攔截器進(jìn)行注冊。

“Spring框架的攔截器和過濾器分別有什么作用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI