拦截器 和过滤器
https://blog.csdn.net/zxd1435513775/article/details/80556034
?
?
攔截器(Interceptor)和過濾器(Filter)的執(zhí)行順序和區(qū)別
2018年06月03日 13:31:00?止步前行?閱讀數(shù):2871?標(biāo)簽:?FilterInterceptorController執(zhí)行順序收起
個人分類:?code框架
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/zxd1435513775/article/details/80556034
一、引言
本來想記錄一下關(guān)于用戶登陸和登陸之后的權(quán)限管理、菜單管理的問題,想到解決這個問題用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想說一下它們的執(zhí)行順序和區(qū)別。關(guān)于Interceptor解決權(quán)限和菜單管理的問題,在放在下一篇寫吧,就醬紫。
二、區(qū)別
1、過濾器(Filter)
首先說一下Filter的使用地方,我們在配置web.xml時,總會配置下面一段設(shè)置字符編碼,不然會導(dǎo)致亂碼問題:
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param> </filter><filter-mapping><filter-name>encoding</filter-name><servlet-name>/*</servlet-name> </filter-mapping>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
配置這個地方的目的,是讓所有的請求都需要進行字符編碼的設(shè)置,下面來介紹一下Filter。
(1)過濾器(Filter):它依賴于servlet容器。在實現(xiàn)上,基于函數(shù)回調(diào),它可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調(diào)用一次。使用過濾器的目的,是用來做一些過濾操作,獲取我們想要獲取的數(shù)據(jù),比如:在Javaweb中,對傳入的request、response提前過濾掉一些信息,或者提前設(shè)置一些參數(shù),然后再傳入servlet或者Controller進行業(yè)務(wù)邏輯操作。通常用的場景是:在過濾器中修改字符編碼(CharacterEncodingFilter)、在過濾器中修改HttpServletRequest的一些參數(shù)(XSSFilter(自定義過濾器)),如:過濾低俗文字、危險字符等。
2、攔截器(Interceptor)
攔截器的配置一般在SpringMVC的配置文件中,使用Interceptors標(biāo)簽,具體配置如下:
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.scorpios.atcrowdfunding.web.LoginInterceptor"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.scorpios.atcrowdfunding.web.AuthInterceptor"></bean></mvc:interceptor> </mvc:interceptors>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
(2)攔截器(Interceptor):它依賴于web框架,在SpringMVC中就是依賴于SpringMVC框架。在實現(xiàn)上,基于Java的反射機制,屬于面向切面編程(AOP)的一種運用,就是在service或者一個方法前,調(diào)用一個方法,或者在方法后,調(diào)用一個方法,比如動態(tài)代理就是攔截器的簡單實現(xiàn),在調(diào)用方法前打印出字符串(或者做其它業(yè)務(wù)邏輯的操作),也可以在調(diào)用方法后打印出字符串,甚至在拋出異常的時候做業(yè)務(wù)邏輯的操作。由于攔截器是基于web框架的調(diào)用,因此可以使用Spring的依賴注入(DI)進行一些業(yè)務(wù)操作,同時一個攔截器實例在一個controller生命周期之內(nèi)可以多次調(diào)用。但是缺點是只能對controller請求進行攔截,對其他的一些比如直接訪問靜態(tài)資源的請求則沒辦法進行攔截處理。
三、代碼
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: 面试官角度弹面试
- 下一篇: 同步和异步有何异同,什么场景使用