最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC 攔截器 interceptor 用法詳解

 更新時(shí)間:2020年07月23日 10:18:37   作者:淺笑安然Shunia  
這篇文章主要介紹了Spring MVC 攔截器 interceptor 用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Spring MVC-攔截器
今天就是把有關(guān)攔截器的知識(shí)做一個(gè)總結(jié)。

1.攔截器概述

1.1 什么是攔截器?

Spring MVC中的攔截器(Interceptor)類似于Servlet中的過濾器(Filter),它主要用于攔截用戶請求并作相應(yīng)的處理。例如通過攔截器可以進(jìn)行權(quán)限驗(yàn)證、記錄請求信息的日志、判斷用戶是否登錄等。
要使用Spring MVC中的攔截器,就需要對攔截器類進(jìn)行定義和配置。通常攔截器類可以通過兩種方式來定義。

1.通過實(shí)現(xiàn)HandlerInterceptor接口,或繼承HandlerInterceptor接口的實(shí)現(xiàn)類(如HandlerInterceptorAdapter)來定義。

2.通過實(shí)現(xiàn)WebRequestInterceptor接口,或繼承WebRequestInterceptor接口的實(shí)現(xiàn)類來定義。

以實(shí)現(xiàn)HandlerInterceptor接口方式為例,自定義攔截器類的代碼如下:

package com.mmm.interceptors;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
* 創(chuàng)建自定義的攔截器
01.務(wù)必實(shí)現(xiàn) HandlerInterceptor!
02.我們使用的攔截器其實(shí)就是針對于Handler的攔截器===》處理器攔截器
03.核心控制器中的HandleMapping返回的就是一個(gè)
處理器執(zhí)行鏈 = Handler+ Interceptors(處理器攔截器)
*/
public class MyInterceptor implements HandlerInterceptor{

/**
*
* @param request
* @param response
* @param handler 打印出來com.mmm.controller.UserController@6225177c
* @return
* @throws Exception
*
*
* HandlerInterceptor接口中的三個(gè)方法:
01.preHandle 如果返回值是false,則不會(huì)執(zhí)行后續(xù)的操作! 一個(gè)攔截器
preHandle如果返回值是true 則會(huì)執(zhí)行下一個(gè)攔截器。。
02.如果有多個(gè)攔截器,則之后攔截器中的所有方法都不會(huì)執(zhí)行!
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("執(zhí)行了 攔截器1111中的 ===》preHandle");

return true;
}

/**
* 之后指定了對應(yīng)Handler中的方法之后 才執(zhí)行!
* @param modelAndView 打印出來 ModelAndView: reference to view with name 'success'; model is {welcome=恭喜您登錄成功}
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("執(zhí)行了 攔截器1111中的===》postHandle");

}

/**
* 只要是當(dāng)前攔截器中的preHandle返回true則此方法必須執(zhí)行!
* @param handler 打印出來com.mmm.controller.UserController@6225177c
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("執(zhí)行了 攔截器1111的 ===》afterCompletion");
}
}

上述代碼中,自定義攔截器實(shí)現(xiàn)了HandlerInterceptor接口,并實(shí)現(xiàn)了接口中的三個(gè)方法:

preHandle() 方法:該方法會(huì)在控制器方法前執(zhí)行,其返回值表示是否中斷后續(xù)操作。當(dāng)其返回值為true時(shí),表示繼續(xù)向下執(zhí)行;
當(dāng)其返回值為false時(shí),會(huì)中斷后續(xù)的所有操作(包括調(diào)用下一個(gè)攔截器和控制器類中的方法執(zhí)行等)。

postHandle()方法:該方法會(huì)在控制器方法調(diào)用之后,且解析視圖之前執(zhí)行??梢酝ㄟ^此方法對請求域中的模型和視圖做出進(jìn)一步的修改。

afterCompletion()方法:該方法會(huì)在整個(gè)請求完成,即視圖渲染結(jié)束之后執(zhí)行??梢酝ㄟ^此方法實(shí)現(xiàn)一些資源清理、記錄日志信息等工作。

1.2 攔截器的配置

開發(fā)攔截器就像開發(fā)servlet或者filter一樣,都需要在配置文件進(jìn)行配置,配置代碼如下:

<!--配置自定義的攔截器-->
<mvc:interceptors>
<!--攔截器1-->
<mvc:interceptor>
<!--配置攔截器的作用路徑-->
<mvc:mapping path= "/user/**"/><!--攔截的路徑規(guī)則-->
<!--定義在<mvc:interceptor>下面的表示匹配指定路徑的請求才進(jìn)行攔截-->
<bean/>
</mvc:interceptor>
<!--攔截器2-->
<mvc:interceptor>
<mvc:mapping path="/user/**"/><!--攔截的路徑規(guī)則-->
<bean/>
</mvc:interceptor>

</mvc:interceptors>

上面的代碼中,<mvc:interceptors>元素用于配置一組攔截器,基子元素<bean>中定義的是全局?jǐn)r截器,它會(huì)攔截所有的請求;而<mvc:interceptor>元素中定義的是指定路徑的攔截器,它會(huì)對指定路徑下的請求生效。<mvc:interceptor>元素的子元素<mvc:mapping>用于配置攔截器作用的路徑,該路徑在其屬性path 中定義。如上述代碼中 path 的屬性值“/**” 表示攔截所有路徑,“/hello” 表示攔截所有以 “/hello” 結(jié)尾的路徑。如果在請求路徑中包含不需要攔截的內(nèi)容,還可以通過<mvc:exclude-mapping>元素進(jìn)行配置。
注意:<mvc:interceptor>中的子元素必須按照上述代碼中的配置順序進(jìn)行編寫,即<mvc:mapping> <mvc:exclude-mapping> <bean>,否則文件會(huì)報(bào)錯(cuò)。

2. 攔截器的執(zhí)行流程

1.程序先執(zhí)行preHandle()方法,如果該方法的返回值為true,則程序會(huì)繼續(xù)向下執(zhí)行處理器中的方法,否則將不再向下執(zhí)行。

2.在業(yè)務(wù)處理器(即控制器Controller類)處理完請求后,會(huì)執(zhí)行postHandle()方法,然后會(huì)通過DispatcherServlet向客戶端返回響應(yīng)。

3.在DispatcherServlet處理完請求后,才會(huì)執(zhí)行afterCompletion()方法。

進(jìn)入了 login
執(zhí)行了 攔截器1111中的 ===》preHandle
執(zhí)行了 攔截器2222中的 ===》preHandle
進(jìn)入了 main
執(zhí)行了 攔截器2222中的===》postHandle
執(zhí)行了 攔截器1111中的===》postHandle
執(zhí)行了 攔截器2222的 ===》afterCompletion
執(zhí)行了 攔截器1111的 ===》afterCompletion

到此這篇關(guān)于Spring MVC 攔截器 interceptor 用法詳解的文章就介紹到這了,更多相關(guān)Spring MVC 攔截器 interceptor 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java調(diào)用7zip解壓壓縮包的實(shí)例

    java調(diào)用7zip解壓壓縮包的實(shí)例

    下面小編就為大家?guī)硪黄猨ava調(diào)用7zip解壓壓縮包的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java環(huán)境變量的設(shè)置方法(圖文教程)

    Java環(huán)境變量的設(shè)置方法(圖文教程)

    想要成功配置Java的環(huán)境變量,那肯定就要安裝JDK,才能開始配置的。
    2013-05-05
  • nacos使用占位符${}進(jìn)行參數(shù)配置的方法

    nacos使用占位符${}進(jìn)行參數(shù)配置的方法

    這篇文章主要介紹了nacos如何使用占位符${}進(jìn)行參數(shù)配置,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • java dump文件怎么生成和分析-JMAP用法詳解

    java dump文件怎么生成和分析-JMAP用法詳解

    這篇文章主要介紹了java dump文件怎么生成和分析-JMAP用法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java動(dòng)態(tài)字節(jié)碼注入技術(shù)的實(shí)現(xiàn)

    Java動(dòng)態(tài)字節(jié)碼注入技術(shù)的實(shí)現(xiàn)

    Java動(dòng)態(tài)字節(jié)碼注入技術(shù)是一種在運(yùn)行時(shí)修改Java字節(jié)碼的技術(shù),本文主要介紹了Java動(dòng)態(tài)字節(jié)碼注入技術(shù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    什么是正則表達(dá)式,正則表達(dá)式的作用是什么?這篇文章主要為大家詳細(xì)介紹了Java正則表達(dá)式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 使用Jmeter進(jìn)行http接口測試的詳細(xì)流程

    使用Jmeter進(jìn)行http接口測試的詳細(xì)流程

    本文主要針對http接口進(jìn)行測試,使用Jmeter工具實(shí)現(xiàn),  Jmter工具設(shè)計(jì)之初是用于做性能測試的,它在實(shí)現(xiàn)對各種接口的調(diào)用方面已經(jīng)做的比較成熟,因此,本次直接使用Jmeter工具來完成對Http接口的測試,需要的朋友可以參考下
    2024-12-12
  • Java利用redis實(shí)現(xiàn)防止接口重復(fù)提交

    Java利用redis實(shí)現(xiàn)防止接口重復(fù)提交

    本文主要為大家詳細(xì)介紹了Java如何利用redis實(shí)現(xiàn)防止接口重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • 利用Java自寫一個(gè)生成ID的工具類

    利用Java自寫一個(gè)生成ID的工具類

    平時(shí)項(xiàng)目中只要涉及表,那么一定能接觸到眾多各式各樣的ID編號(hào)。本文將通過Java語言實(shí)現(xiàn)手寫一個(gè)ID生成工具類,需要的小伙伴可以參考一下
    2022-11-11
  • Spring Security實(shí)現(xiàn)自動(dòng)登陸功能示例

    Spring Security實(shí)現(xiàn)自動(dòng)登陸功能示例

    自動(dòng)登錄在很多網(wǎng)站和APP上都能用的到,解決了用戶每次輸入賬號(hào)密碼的麻煩。本文就使用Spring Security實(shí)現(xiàn)自動(dòng)登陸功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論

温宿县| 无棣县| 贵州省| 南投县| 万载县| 山阳县| 莱芜市| 雷州市| 达尔| 沁源县| 宜兴市| 瑞金市| 辽阳市| 于都县| 神池县| 巴马| 小金县| 江口县| 邛崃市| 华蓥市| 吉首市| 石门县| 蒙城县| 上杭县| 利津县| 民乐县| 齐河县| 缙云县| 铁岭县| 团风县| 河北区| 溆浦县| 旬阳县| 确山县| 宜阳县| 沂源县| 安宁市| 体育| 绥阳县| 苏州市| 通河县|