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

Spring MVC攔截器的基本使用方法

 更新時(shí)間:2019年07月21日 10:58:24   作者:周二  
這篇文章主要給大家介紹了關(guān)于Spring MVC攔截器的基本使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring MVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

攔截器簡(jiǎn)介

Spring MVC 中的攔截器(Interceptor)類似于 Servler 中的過濾器(Filter)。用于對(duì)處理器進(jìn)行預(yù)處理和后處理。常用于日志記錄、權(quán)限管理、性能監(jiān)控、通用行為等。

攔截器的實(shí)現(xiàn)

Spring MVC 中的攔截器需要我們手動(dòng)實(shí)現(xiàn)和配置。攔截器可以通過以下兩種方式定義

  • 實(shí)現(xiàn) HandleInterceptor 接口,或者繼承該接口的實(shí)現(xiàn)類如 HandleInterceptorAdapter 來定義一個(gè)攔截器;
  • 實(shí)現(xiàn) WebRequestInterceptor 接口來定義一個(gè)攔截器;

HandleInterceptor 接口

我們主要講解下實(shí)現(xiàn) HandleInterceptor 接口來創(chuàng)建攔截器。HandleInterceptor 接口定義了三個(gè)方法,分別為 preHandle() , postHandle() , afterCompletion(),我們需要重寫這三個(gè)方法,從而來實(shí)現(xiàn)我們定義攔截器的目的。

  • preHandle(HttpServletRequest request, HttpServletResponse response, Object handle):該方法在請(qǐng)求處理前調(diào)用。Spring MVC 中的攔截器是鏈?zhǔn)秸{(diào)用的,一個(gè)請(qǐng)求可以被多個(gè)攔截器攔截,但是 Interceptor 會(huì)根據(jù)被聲明的次序依次被調(diào)用執(zhí)行,而不會(huì)同時(shí)去攔截。而且所有 Interceptor 中的 preHandle 函數(shù)都會(huì)最先被調(diào)用,所以這個(gè)方法中可以進(jìn)行一些前置初始化操作或者是對(duì)當(dāng)前請(qǐng)求的預(yù)處理,或者設(shè)置一些判斷來決定該請(qǐng)求是否執(zhí)行下去。該方法的返回值是布爾值,當(dāng)它返回 true 時(shí),之后的 Interceptor 和 controller 都不會(huì)執(zhí)行下去了;當(dāng)它返回 false 時(shí),就會(huì)繼續(xù)調(diào)用下一個(gè) Interceptor 的 preHandle 方法或者處理當(dāng)前請(qǐng)求的 Controller。
  • postHandle(HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView):該方法只有在 perHandle 方法返回值為 true 時(shí),在 Controller 執(zhí)行完當(dāng)前請(qǐng)求后才會(huì)執(zhí)行。咋一看好像和之后要介紹的 afterCompletion 方法沒有不同,但是這個(gè)方法會(huì)在 DispatcherServlet 進(jìn)行視圖渲染之前被調(diào)用,所以咱們可以在這個(gè)方法中對(duì) Controller 處理之后的 ModelAndView 對(duì)象進(jìn)行操作。
  • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex):該方法在整個(gè)請(qǐng)求結(jié)束后,也就是 DispatcherServlet 渲染了對(duì)應(yīng)視圖之后執(zhí)行,這個(gè)方法的主要作用是用于進(jìn)行資源清理的工作。

假設(shè)我們現(xiàn)在定義了兩個(gè)攔截器,xml 配置文件中配置順序如下內(nèi)容如下:

<!-- 攔截器1 -->
<mvc:interceptor>
 <!--配置攔截器的作用路徑-->
 <mvc:mapping path="/**"/>
 <bean class="com.jojo.test.interceptor.Intercptor1"/>
</mvc:interceptor>
<!--攔截器2-->
<mvc:interceptor>
 <mvc:mapping path="/hello"/>
 <bean class="com.jojo.test.interceptor.Interceptor2"/>
</mvc:interceptor>

那么這兩個(gè)攔截器中的處理方法和請(qǐng)求的處理方法的順序如下圖:


實(shí)際應(yīng)用舉例

實(shí)現(xiàn)開發(fā)中,我們會(huì)要求一些頁面需要登錄后才能訪問。未登錄狀態(tài)是無法得到訪問權(quán)限的。這一小功能我們可以直接通過安全框架,類似 Spring Security 或者 shiro 來實(shí)現(xiàn),不過我們現(xiàn)在利用 Spring MVC 這一功能來實(shí)現(xiàn)一下:

public class LoginInterceptor implements HandlerInterceptor {
 
 public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
  
  User user = (User) httpServletRequest.getSession().getAttribute("user");

  if (user == null) {
   // 用戶未登錄,重定向到登錄頁
   httpServletResponse.sendRedirect("/login");
   return false;
  }

  return true;
 }

 public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
  
  }
 }

 public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

 }
}

我們還需要在 spring-mvc 中配置攔截器

<mvc:interceptors>
 <mvc:interceptor>
  <mvc:mapping path="/**"/>
  <mvc:exclude-mapping path="/static/**"/>
  <mvc:exclude-mapping path="/login"/>
  <bean class="com.jojo.test.interceptor.LoginInterceptor"/>
 </mvc:interceptor>
</mvc:interceptors>

相關(guān)配置說明:

  • mvc:interceptor:定義一個(gè)攔截器
    • mvc:mapping:定義需要被攔截的路徑
    • mvc:exclude-mapping:定義需要排除攔截的請(qǐng)求路徑
    • bean class:指定攔截器對(duì)象

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解代理模式

    Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解代理模式

    代理模式是Java常見的設(shè)計(jì)模式之一。所謂代理模式是指客戶端并不直接調(diào)用實(shí)際的對(duì)象,而是通過調(diào)用代理,來間接的調(diào)用實(shí)際的對(duì)象
    2022-04-04
  • Java文本文件操作方法實(shí)例詳解

    Java文本文件操作方法實(shí)例詳解

    這篇文章主要介紹了Java文本文件操作方法,以實(shí)例形式較為詳細(xì)的分析了java操作文本文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 一文徹底吃透SpringMVC中的轉(zhuǎn)發(fā)和重定向

    一文徹底吃透SpringMVC中的轉(zhuǎn)發(fā)和重定向

    大家應(yīng)該都知道springmvc本來就會(huì)把返回的字符串作為視圖名解析,然后轉(zhuǎn)發(fā)到對(duì)應(yīng)的視圖,這篇文章主要給大家介紹了關(guān)于SpringMVC中轉(zhuǎn)發(fā)和重定向的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • java仿windows記事本小程序

    java仿windows記事本小程序

    這篇文章主要為大家詳細(xì)介紹了java仿windows記事本小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 深入了解Spring中最常用的11個(gè)擴(kuò)展點(diǎn)

    深入了解Spring中最常用的11個(gè)擴(kuò)展點(diǎn)

    我們一說到spring,可能第一個(gè)想到的是?IOC(控制反轉(zhuǎn))?和?AOP(面向切面編程)。除此之外,我們?cè)谑褂胹pring的過程中,有沒有發(fā)現(xiàn)它的擴(kuò)展能力非常強(qiáng)。今天就來跟大家一起聊聊,在Spring中最常用的11個(gè)擴(kuò)展點(diǎn)
    2022-09-09
  • Java中finally關(guān)鍵字對(duì)返回值的影響詳解

    Java中finally關(guān)鍵字對(duì)返回值的影響詳解

    這篇文章主要介紹了Java中finally關(guān)鍵字對(duì)返回值的影響詳解,執(zhí)行完try catch里面內(nèi)容準(zhǔn)備return時(shí),如果還有finally需要執(zhí)行這是編譯器會(huì)為我們?cè)黾右粋€(gè)全局變量去暫存return 的值,等到finally執(zhí)行完成去return這個(gè)全局變量,需要的朋友可以參考下
    2024-01-01
  • maven搭建java ee項(xiàng)目圖文教程

    maven搭建java ee項(xiàng)目圖文教程

    這篇文章主要為大家詳細(xì)介紹了maven搭建java ee項(xiàng)目圖文教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 詳解Java MD5二次加密的應(yīng)用

    詳解Java MD5二次加密的應(yīng)用

    MD5的全稱是message-digest algorithm 5 信息-摘要算法。這篇文章主要為大家詳細(xì)介紹了Java中MD5二次加密的應(yīng)用,感興趣的小伙伴可以了解一下
    2023-02-02
  • 詳解Guava中EventBus的使用

    詳解Guava中EventBus的使用

    EventBus是Guava的事件處理機(jī)制,是設(shè)計(jì)模式中觀察者模式(生產(chǎn)/消費(fèi)者編程模型)的優(yōu)雅實(shí)現(xiàn)。本文就來和大家聊聊EventBus的使用,需要的可以參考一下
    2022-12-12
  • SpringBoot中的配置類(@Configuration)

    SpringBoot中的配置類(@Configuration)

    這篇文章主要介紹了SpringBoot中的配置類(@Configuration),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

岢岚县| 辛集市| 泽库县| 方城县| 崇义县| 绍兴县| 修水县| 洛宁县| 河北区| 金寨县| 大名县| 青浦区| 龙山县| 屯门区| 古浪县| 台南县| 育儿| 申扎县| 富蕴县| 承德县| 宝清县| 吴川市| 韶山市| 锡林浩特市| 南昌市| 太仆寺旗| 莎车县| 巧家县| 临泽县| 平利县| 绥宁县| 平果县| 鄯善县| 平度市| 麻城市| 绥滨县| 英吉沙县| 左云县| 伽师县| 彰化市| 漳浦县|