亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

攔截器簡介

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

攔截器的實現(xiàn)

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

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

HandleInterceptor 接口

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

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

假設(shè)我們現(xiàn)在定義了兩個攔截器,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>

那么這兩個攔截器中的處理方法和請求的處理方法的順序如下圖:


實際應(yīng)用舉例

實現(xiàn)開發(fā)中,我們會要求一些頁面需要登錄后才能訪問。未登錄狀態(tài)是無法得到訪問權(quán)限的。這一小功能我們可以直接通過安全框架,類似 Spring Security 或者 shiro 來實現(xiàn),不過我們現(xiàn)在利用 Spring MVC 這一功能來實現(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:定義一個攔截器
    • mvc:mapping:定義需要被攔截的路徑
    • mvc:exclude-mapping:定義需要排除攔截的請求路徑
    • bean class:指定攔截器對象

總結(jié)

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

相關(guān)文章

  • java利用數(shù)組隨機抽取幸運觀眾

    java利用數(shù)組隨機抽取幸運觀眾

    這篇文章主要為大家詳細介紹了java利用數(shù)組隨機抽取幸運觀眾,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • JDBC獲取數(shù)據(jù)庫連接由淺入深

    JDBC獲取數(shù)據(jù)庫連接由淺入深

    大家好,本篇文章主要講的是JDBC獲取數(shù)據(jù)庫連接由淺入深,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • java swing實現(xiàn)簡單計算器界面

    java swing實現(xiàn)簡單計算器界面

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)簡單計算器界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • IDEA的Swing可視化插件JFormDesigner詳解

    IDEA的Swing可視化插件JFormDesigner詳解

    JFormDesigner是一個專業(yè)的軟件應(yīng)用程序,專門用于幫助您開發(fā)Java?Swing用戶界面,而無需具備編程技能。它可作為獨立實用程序使用,也可以將其用作各種IDE的插件,本文給大家介紹idea?Swing可視化插件,感興趣的朋友一起看看吧
    2022-06-06
  • spring通過導(dǎo)入jar包和配置xml文件啟動的步驟詳解

    spring通過導(dǎo)入jar包和配置xml文件啟動的步驟詳解

    這篇文章主要介紹了spring通過導(dǎo)入jar包和配置xml文件啟動,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 完美解決springboot中使用mybatis字段不能進行自動映射的問題

    完美解決springboot中使用mybatis字段不能進行自動映射的問題

    今天在springboot中使用mybatis的時候不能字段不能夠進行自動映射,接下來給大家給帶來了完美解決springboot中使用mybatis字段不能進行自動映射的問題,需要的朋友可以參考下
    2023-05-05
  • 使用Jenkins來構(gòu)建SVN+Maven項目的實現(xiàn)

    使用Jenkins來構(gòu)建SVN+Maven項目的實現(xiàn)

    這篇文章主要介紹了使用Jenkins來構(gòu)建SVN+Maven項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java向文件中追加內(nèi)容與讀寫文件內(nèi)容源碼實例代碼

    java向文件中追加內(nèi)容與讀寫文件內(nèi)容源碼實例代碼

    這篇文章主要介紹了java向文件中追加內(nèi)容與讀寫文件內(nèi)容源碼實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 解決@Autowired注入static接口的問題

    解決@Autowired注入static接口的問題

    這篇文章主要介紹了解決@Autowired注入static接口的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java基于正則表達式實現(xiàn)xml文件的解析功能詳解

    Java基于正則表達式實現(xiàn)xml文件的解析功能詳解

    這篇文章主要介紹了Java基于正則表達式實現(xiàn)xml文件的解析功能,結(jié)合實例形式分析了java使用正則表達式針對xml文件節(jié)點的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08

最新評論