日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC-HandlerInterceptor拦截器的使用与参数详解

發(fā)布時(shí)間:2025/3/15 javascript 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC-HandlerInterceptor拦截器的使用与参数详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

攔截器概念:

  • 攔截器( Interceptor)是一種動態(tài)攔截方法調(diào)用的機(jī)制,請求處理過程解析
  • 核心原理: AOP思想
  • 攔截器鏈:多個(gè)攔截器按照一定的順序,對原始被調(diào)用功能進(jìn)行增強(qiáng)

作用:

  • 在指定的方法調(diào)用前后執(zhí)行預(yù)先設(shè)定后的的代碼
  • 阻止原始方法的執(zhí)行
  • 攔截器VS過濾器

    • 歸屬不同: 過濾器屬于Servlet技術(shù), 攔截器屬于SpringMVC技術(shù)
    • 攔截內(nèi)容不同: 過濾器對所有訪問進(jìn)行增強(qiáng), 攔截器僅針對SpringMVC的訪問進(jìn)行增強(qiáng)

    攔截器執(zhí)行流程:

    自定義攔截器開發(fā)過程:

    實(shí)現(xiàn)HandlerInterceptor接口

    //自定義攔截器需要實(shí)現(xiàn)HandleInterceptor接口 public class MyInterceptor implements HandlerInterceptor {//前置處理方法:原始方法之前執(zhí)行@Overridepublic boolean preHandle(HttpServletRequest request, //請求對象HttpServletResponse response, //響應(yīng)對象Object handler) // 被調(diào)用的處理器對象,本質(zhì)是一個(gè)方法對象,對反射中的Method對象進(jìn)行了再包裝,對方法進(jìn)行封裝加強(qiáng),操作原始對象,throws Exception {System.out.println("前置運(yùn)行");//返回值為false將攔截原始處理器的運(yùn)行,也就是是否放行,如果是false后面的代碼不會運(yùn)行,如果是true就繼續(xù)執(zhí)行下面的代碼//如果配置多攔截器,返回值為false將終止當(dāng)前攔截器后面配置的攔截器的運(yùn)行return true;}//后置處理方法:原始方法運(yùn)行后運(yùn)行,如果原始方法被攔截,則不執(zhí)行@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView) // 如果處理器執(zhí)行完成具有返回結(jié)果,可以讀取到對應(yīng)數(shù)據(jù)與頁面信息進(jìn)行調(diào)整throws Exception {System.out.println("后置運(yùn)行");}// 完成處理方法:攔截器最后執(zhí)行的方法,無論原始方法是否執(zhí)行@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) // 如果處理器執(zhí)行過程中出現(xiàn)異常對象,可以針對異常情況進(jìn)行單獨(dú)處理throws Exception {System.out.println("完成運(yùn)行");}//三個(gè)方法的運(yùn)行順序?yàn)? preHandle -> postHandle -> afterCompletion//如果preHandle返回值為false,三個(gè)方法僅運(yùn)行preHandle }

    攔截器配置項(xiàng):

    <mvc:interceptors><!--開啟具體的攔截器的使用,可以配置多個(gè)--><mvc:interceptor><!--設(shè)置攔截器的攔截路徑,支持*通配--><!--/** 表示攔截所有映射--><!--/* 表示攔截所有/開頭的映射--><!--/user/* 表示攔截所有/user/開頭的映射--><!--/user/add* 表示攔截所有/user/開頭,且具體映射名稱以add開頭的映射--><!--/user/*All 表示攔截所有/user/開頭,且具體映射名稱以All結(jié)尾的映射--><mvc:mapping path="/*"/><mvc:mapping path="/**"/><mvc:mapping path="/handleRun*"/><!--設(shè)置攔截排除的路徑,配置/**或/*,達(dá)到快速配置的目的--><mvc:exclude-mapping path="/b*"/><!--指定具體的攔截器類 bean標(biāo)簽(ref標(biāo)簽)只能配置一個(gè) ref:引用bean的 --><bean class="com.itzhuzhu.interceptor.MyInterceptor"/></mvc:interceptor> </mvc:interceptors>

    多攔截器配置:

    運(yùn)行順序:配置在前,則執(zhí)行在前。

    <mvc:interceptors><mvc:interceptor><mvc:mapping path="/showPage"/><bean class="com.itzhuzhu.interceptor.MyInterceptor"/></mvc:interceptor></mvc:interceptors><mvc:interceptors><mvc:interceptor><mvc:mapping path="/showPage"/><bean class="com.itzhuzhu.interceptor.MyInterceptor2"/></mvc:interceptor></mvc:interceptors><mvc:interceptors><mvc:interceptor><mvc:mapping path="/showPage"/><bean class="com.itzhuzhu.interceptor.MyInterceptor3"/></mvc:interceptor></mvc:interceptors>

    多攔截器執(zhí)行順序:

    責(zé)任鏈模式

    責(zé)任鏈模式是一種行為模式

    特征:

    沿著一條預(yù)先設(shè)定的任務(wù)鏈順序執(zhí)行,每個(gè)節(jié)點(diǎn)具有獨(dú)立的工作任務(wù)

    優(yōu)勢:

    • 獨(dú)立性:只關(guān)注當(dāng)前節(jié)點(diǎn)的任務(wù),對其他任務(wù)直接放行到下一節(jié)點(diǎn)
    • 隔離性:具備鏈?zhǔn)絺鬟f特征,無需知曉整體鏈路結(jié)構(gòu),只需等待請求到達(dá)后進(jìn)行處理即可
    • 靈活性:可以任意修改鏈路結(jié)構(gòu)動態(tài)新增或刪減整體鏈路責(zé)任
    • 解耦:將動態(tài)任務(wù)與原始任務(wù)解耦

    弊端:

    • 鏈路過長時(shí),處理效率低下
    • 可能存在節(jié)點(diǎn)上的循環(huán)引用現(xiàn)象,造成死循環(huán),導(dǎo)致系統(tǒng)崩潰

    總結(jié)

    以上是生活随笔為你收集整理的SpringMVC-HandlerInterceptor拦截器的使用与参数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。