拦截器 和过滤器
https://blog.csdn.net/zxd1435513775/article/details/80556034
?
?
攔截器(Interceptor)和過濾器(Filter)的執行順序和區別
2018年06月03日 13:31:00?止步前行?閱讀數:2871?標簽:?FilterInterceptorController執行順序收起
個人分類:?code框架
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/zxd1435513775/article/details/80556034
一、引言
本來想記錄一下關于用戶登陸和登陸之后的權限管理、菜單管理的問題,想到解決這個問題用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想說一下它們的執行順序和區別。關于Interceptor解決權限和菜單管理的問題,在放在下一篇寫吧,就醬紫。
二、區別
1、過濾器(Filter)
首先說一下Filter的使用地方,我們在配置web.xml時,總會配置下面一段設置字符編碼,不然會導致亂碼問題:
<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
配置這個地方的目的,是讓所有的請求都需要進行字符編碼的設置,下面來介紹一下Filter。
(1)過濾器(Filter):它依賴于servlet容器。在實現上,基于函數回調,它可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的,是用來做一些過濾操作,獲取我們想要獲取的數據,比如:在Javaweb中,對傳入的request、response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入servlet或者Controller進行業務邏輯操作。通常用的場景是:在過濾器中修改字符編碼(CharacterEncodingFilter)、在過濾器中修改HttpServletRequest的一些參數(XSSFilter(自定義過濾器)),如:過濾低俗文字、危險字符等。
2、攔截器(Interceptor)
攔截器的配置一般在SpringMVC的配置文件中,使用Interceptors標簽,具體配置如下:
<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框架。在實現上,基于Java的反射機制,屬于面向切面編程(AOP)的一種運用,就是在service或者一個方法前,調用一個方法,或者在方法后,調用一個方法,比如動態代理就是攔截器的簡單實現,在調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在調用方法后打印出字符串,甚至在拋出異常的時候做業務邏輯的操作。由于攔截器是基于web框架的調用,因此可以使用Spring的依賴注入(DI)進行一些業務操作,同時一個攔截器實例在一個controller生命周期之內可以多次調用。但是缺點是只能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理。
三、代碼
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 面试官角度弹面试
- 下一篇: 赛钛客鼠标宏设置(赛钛客无线鼠标)