淺析java中 Spring MVC 攔截器作用及其實現(xiàn)
攔截器的實現(xiàn)
1、編寫攔截器類實現(xiàn)HandlerInterceptor接口;
2、將攔截器注冊進springmvc框架中;
3、配置攔截器的攔截規(guī)則;
其他實現(xiàn)方法
WebRequestInterceptor接口:
與上一個的區(qū)別是參數(shù)區(qū)別和prehandle的方法沒有返回值。沒有上一個功能全,因此常用第一個。
攔截器的使用場景
處理所有請求共性問題:
1、亂碼問題:用request,response參數(shù)去設(shè)置編碼;
2、解決權(quán)限驗證問題(是否登陸,取session對象查看);
攔截器與過濾器的區(qū)別
1、攔截器Interceptor依賴于框架容器,基于反射機制,只過濾請求;
2、過濾器Filter依賴于Servlet容器,基于回調(diào)函數(shù),過濾范圍大;
例子
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class TestInterceptor implements HandlerInterceptor { /** * 返回值說明是否需要將當(dāng)前的請求攔截下來 * false:請求將被終止 * true:請求會被繼續(xù)運行 * Object handler 表示的是被攔截的請求的目標(biāo)對象 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("TestInterceptor.preHandle()"); return true; } /** * modelAndView: * 可以通過modelAndView參數(shù)改變顯示的視圖,或者修改發(fā)往視圖的方法 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("TestInterceptor.postHandle()"); } /** * 在視圖加載完畢之后調(diào)用 * 常用于作于資源的銷毀,流等 * 類似于析構(gòu)函數(shù) */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("TestInterceptor.afterCompletion()"); } }
注冊方式:
在springmvc的Dispatcherservlet配置文件中加入攔截器代碼;
<!-- 注冊攔截器 --> <mvc:interceptors> <!-- 單個攔截器:設(shè)置具體的攔截路徑 --> <mvc:interceptor> <mvc:mapping path="/courses/view2/*"> <bean class="com.cc.mvcdemo.interceptor.TestInterceptor"></bean> </mvc:mapping></mvc:interceptor> <!-- 第二種方式:攔截經(jīng)過當(dāng)前Dispatcherservlet的所有請求 --> <bean class="com.cc.mvcdemo.interceptor.TestInterceptorTwo"></bean> </mvc:interceptors>
希望本篇文章內(nèi)容對各位朋友有所幫助
相關(guān)文章
Maven項目部署到Jboss出現(xiàn)Failed to create a new SAX parser
這篇文章主要為大家詳細介紹了Maven項目部署到Jboss出現(xiàn)Failed to create a new SAX parser的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11SpringBoot整合Shiro的環(huán)境搭建教程
這篇文章主要為大家詳細介紹了SpringBoot整合Shiro的環(huán)境搭建教程,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下2022-12-12Java基于UDP協(xié)議實現(xiàn)簡單的聊天室程序
這篇文章主要為大家詳細介紹了Java基于UDP協(xié)議實現(xiàn)簡單的聊天室程序的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07詳解JavaScript中的函數(shù)聲明和函數(shù)表達式
這篇文章主要介紹了詳解JavaScript中的函數(shù)聲明和函數(shù)表達式,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08Java內(nèi)存模型之happens-before概念詳解
happens-before原則非常重要,它是判斷數(shù)據(jù)是否存在競爭、線程是否安全的主要依據(jù),依靠這個原則,我們解決在并發(fā)環(huán)境下兩操作之間是否可能存在沖突的所有問題。下面我們就一個簡單的例子稍微了解下happens-before知識,感興趣的朋友一起看看吧2021-06-06Idea安裝Eslint插件提示:Plugin NativeScript was not installed的問題
這篇文章主要介紹了Idea安裝Eslint插件提示:Plugin NativeScript was not installed的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10