Spring MVC 攔截器實(shí)現(xiàn)代碼
攔截器的實(shí)現(xiàn)
1、編寫攔截器類實(shí)現(xiàn)HandlerInterceptor接口;
2、將攔截器注冊(cè)進(jìn)springmvc框架中;
3、配置攔截器的攔截規(guī)則;
其他實(shí)現(xiàn)方法
WebRequestInterceptor接口:
與上一個(gè)的區(qū)別是參數(shù)區(qū)別和prehandle的方法沒有返回值。沒有上一個(gè)功能全,因此常用第一個(gè)。
攔截器的使用場(chǎng)景
處理所有請(qǐng)求共性問題:
1、亂碼問題:用request,response參數(shù)去設(shè)置編碼;
2、解決權(quán)限驗(yàn)證問題(是否登陸,取session對(duì)象查看);
攔截器與過濾器的區(qū)別
1、攔截器Interceptor依賴于框架容器,基于反射機(jī)制,只過濾請(qǐng)求;
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)前的請(qǐng)求攔截下來 * false:請(qǐng)求將被終止 * true:請(qǐng)求會(huì)被繼續(xù)運(yùn)行 * Object handler 表示的是被攔截的請(qǐng)求的目標(biāo)對(duì)象 */ @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()"); } }
注冊(cè)方式:
在springmvc的Dispatcherservlet配置文件中加入攔截器代碼;
<!-- 注冊(cè)攔截器 --> <mvc:interceptors> <!-- 單個(gè)攔截器:設(shè)置具體的攔截路徑 --> <mvc:interceptor> <mvc:mapping path="/courses/view2/*"/> <bean class="com.cc.mvcdemo.interceptor.TestInterceptor"></bean> </mvc:interceptor> <!-- 第二種方式:攔截經(jīng)過當(dāng)前Dispatcherservlet的所有請(qǐng)求 --> <bean class="com.cc.mvcdemo.interceptor.TestInterceptorTwo"></bean> </mvc:interceptors>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)雙色球抽獎(jiǎng)算法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)雙色球抽獎(jiǎng)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05SpringBoot整合Mybatis-plus實(shí)現(xiàn)多級(jí)評(píng)論功能
本文介紹了如何使用SpringBoot整合Mybatis-plus實(shí)現(xiàn)多級(jí)評(píng)論功能,同時(shí)提供了數(shù)據(jù)庫(kù)的設(shè)計(jì)和詳細(xì)的后端代碼,前端界面使用的Vue2,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-05-05java web將數(shù)據(jù)導(dǎo)出為pdf格式文件代碼片段
這篇文章主要為大家詳細(xì)介紹了java web將數(shù)據(jù)導(dǎo)出為pdf格式文件代碼片段,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01使用JPA單項(xiàng)一對(duì)多外鍵關(guān)聯(lián)
這篇文章主要介紹了使用JPA單項(xiàng)一對(duì)多外鍵關(guān)聯(lián),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java面試崗常見問題之ArrayList和LinkedList的區(qū)別
ArrayList和LinkedList作為我們Java中最常使用的集合類,很多人在被問到他們的區(qū)別時(shí),憋了半天僅僅冒出一句:一個(gè)是數(shù)組一個(gè)是鏈表。這樣回答簡(jiǎn)直讓面試官吐血。為了讓兄弟們打好基礎(chǔ),我們通過實(shí)際的使用測(cè)試,好好說一下ArrayList和LinkedList的區(qū)別這道經(jīng)典的面試題2022-01-01java開發(fā)之spring webflow實(shí)現(xiàn)上傳單個(gè)文件及多個(gè)文件功能實(shí)例
這篇文章主要介紹了java開發(fā)之spring webflow實(shí)現(xiàn)上傳單個(gè)文件及多個(gè)文件功能,結(jié)合具體實(shí)例形式分析了spring webflow文件上傳具體操作技巧,需要的朋友可以參考下2017-11-11