您好,登錄后才能下訂單哦!
本篇內容介紹了“Spring框架的攔截器和過濾器分別有什么作用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
過濾器(Filter):它是依賴于servlet容器。在實現上,基于函數的回調,它可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數據,比如:在javaweb中,對傳入的request、response提前過濾掉一些信息,或者提前設置一些參數,然后在傳入servlet或者controll進行業務邏輯操作。通常用的場景 :在過濾中修改字符編碼、在過濾器中修改HttpServletRequest的一些參數(XSSfilter自定義過濾器),如:過濾低俗文字,危險字符等。
攔截器(interceptors):它是依賴于web框架,在SpringMVC中就是依賴于SpringMVC框架。在實現上,基于Java的反射機制,屬于面向切面編程(AOP)的一種運用,就是在service或者一個方法前,調用一個方法,或者在方法后,調用一個方法,比如動態代理就是攔截器的簡單實現,在調用方法前打印出字符串(或者做其他邏輯操作),也可以在調用方法后打印出字符串,甚至在拋出異常的時候做業務邏輯的操作。由于攔截器是基于web框架的調用,因此可以使用Spring的依賴注入進行一些業務操作,同時一個攔截器實例在一個controller生命周期能可以多次調用。但是缺點是只能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理。
區別:
1、使用范圍不同:filter是servlet規范規定的,只能用于web程序中,而攔截器既可以用于web程序,也可以用于application,swing程序中。
2、規范不同:filter是在servlet規范中定義的,是servlet容器支持的。而攔截器是在Spring容器內的,是Spring框架支持的。
3、使用的資源不同:同其他的代碼塊一樣,攔截器也是一個Spring的組件,歸Spring管理,配置在Spring文件中,因此能使用Spring里的任何資源,對象,例如:service對象,數據源,事務管理等,通過Ioc注入到攔截器即可,而Filter則不能
4、深度不同:Filter只在Servlet前后起作用。而攔截器能夠深入到方法前后,異常拋出前后等,因此攔截器的使用具有更大的彈性。所以在Spring框架的程序中,要優先使用攔截器。
過濾器的實現:
定義一個類實現javax.servlet.Filter接口,該接口提供三個方法
init(FilterConfig config)方法:此方法用于初始化,在容器加載并實例化過濾器的時候自動調用。容器為此方法傳遞一個FilterConfig對象,其中包含配置信息。
doFilter(servletRequest request,ServletResponse response,FilterChain chain)方法:此方法是過濾器的核心方法,用于對請求和響應進行處理。
destiry()方法:此方法用于銷毀過濾器,但容器銷毀過濾器實例之前自動調用
過濾器的兩種配置方法:
1、注解:
@WebFilter將一個實現了javax.servlet.Filte接口的類定義為過濾器
屬性filterName聲明過濾器的名稱,可選
屬性urlPatterns指定要過濾的URL模式,也可使用屬性value來聲明
2、配置文件
使用<filter>標簽在web.xml文件中配置
攔截器的實現:
定義一個類,通過實現HandlerInterceptor接口,或繼承HandlerInterceptor接口的實現類來定義,該接口實現三個方法,
preHandle()方法:該方法會在控制器方法前執行,其返回值表示是否中斷后續操作。當其返回值為true時,表示繼續向下執行,當其返回值為false時,會中斷后續的所有操作
postHandle()方法:該方法會在控制器方法調用之后,且解析視圖之前執行,可以通過此方法對請求域中的模型和視圖做出進一步的修改
afterHandle()方法:該方法會在整個請求完成,即視圖渲染結束之后執行,可以通過此方法實現一些資源清理,記錄日志信息等工作。
攔截器的兩種配置方法:
1、在SpringMVC配置文件中,使用<mvc:interceptors> 標簽配置
2、定義一個配置類,繼承WebMvcConfigurerAdapter,重寫addInterceptors方法,對自定義的攔截器進行注冊。
“Spring框架的攔截器和過濾器分別有什么作用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。