91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解SpringMVC攔截器配置及使用方法

發布時間:2020-09-04 18:48:26 來源:腳本之家 閱讀:133 作者:_xiaoxiong 欄目:編程語言

本文介紹了SpringMVC攔截器配置及使用方法,分享給大家,具體如下:

常見應用場景

1、日志記錄:記錄請求信息的日志,以便進行信息監控、信息統計、計算PV(Page View)等。

2、權限檢查:如登錄檢測,進入處理器檢測檢測是否登錄,如果沒有直接返回到登錄頁面;

3、性能監控:有時候系統在某段時間莫名其妙的慢,可以通過攔截器在進入處理器之前記錄開始時間,在處理完后記錄結束時間,從而得到該請求的處理時間(如果有反向代理,如apache可以自動記錄);

4、通用行為:讀取cookie得到用戶信息并將用戶對象放入請求,從而方便后續流程使用,還有如提取Locale、Theme信息等,只要是多個處理器都需要的即可使用攔截器實現。

5、OpenSessionInView:如Hibernate,在進入處理器打開Session,在完成后關閉Session。本質也是AOP(面向切面編程),也就是說符合橫切關注點的所有功能都可以放入攔截器實現。

配置文件

定義兩個攔截器 HandleInterceptor1 , HandleInterceptor2

<!-- 攔截器 多個按順序攔截 -->
 <mvc:interceptors>
  <mvc:interceptor>
   <mvc:mapping path="/**"/>
   <bean class="com.xwx.interceptor.HandleInterceptor1"></bean>
  </mvc:interceptor>
  <mvc:interceptor>
   <mvc:mapping path="/**"/>
   <bean class="com.xwx.interceptor.HandleInterceptor2"></bean>
  </mvc:interceptor>
 </mvc:interceptors>

使用方法

preHandle 在Handle執行前 執行

return true 繼續執行 false不繼續執行

在modelAndView 執行前 執行

在 Handle 執行后 執行

HandleInterceptor1 .java

package com.xwx.interceptor;

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

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class HandleInterceptor1 implements HandlerInterceptor {

 public static Logger log = Logger.getLogger(HandleInterceptor1.class.getName());

 /**
  * 在Handle執行前 執行
  * return true 繼續執行 false不繼續執行
  */
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {
   log.info("HandleInterceptor1 ...... preHandle");
  return true;
 }

 /**
  * 在modelAndView 執行前 執行
  */
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
   ModelAndView modelAndView) throws Exception {
   log.info("HandleInterceptor1 ...... postHandle");

 }

 /**
  * 在 Handle 執行后 執行
  */
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
   throws Exception {
   log.info("HandleInterceptor1 ...... afterCompletion");
 }

}
 

HandleInterceptor2 .java

package com.xwx.interceptor;

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

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class HandleInterceptor2 implements HandlerInterceptor {

 public static Logger log = Logger.getLogger(HandleInterceptor2.class.getName());

 /**
  * 在Handle執行前 執行
  * return true 繼續執行 false不繼續執行
  */
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {
   log.info("HandleInterceptor2 ...... preHandle");
  return false;
 }

 /**
  * 在modelAndView 執行前 執行
  */
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
   ModelAndView modelAndView) throws Exception {
   log.info("HandleInterceptor2 ...... postHandle");

 }

 /**
  * 在 Handle 執行后 執行
  */
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
   throws Exception {
   log.info("HandleInterceptor2 ...... afterCompletion");
 }

}

攔截器執行順序

preHandle 按順序執行, postHandle afterCompletion 則是逆向執行

16:08:29,187 INFO HandleInterceptor1:20 - HandleInterceptor1 ...... preHandle
16:08:29,187 INFO HandleInterceptor2:20 - HandleInterceptor2 ...... preHandle

16:08:29,640 INFO HandleInterceptor2:29 - HandleInterceptor2 ...... postHandle
16:08:29,640 INFO HandleInterceptor1:29 - HandleInterceptor1 ...... postHandle

16:08:29,706 INFO HandleInterceptor2:38 - HandleInterceptor2 ...... afterCompletion
16:08:29,706 INFO HandleInterceptor1:38 - HandleInterceptor1 ...... afterCompletion

第一個攔截器沒通過,不會繼續執行。

第二個攔截器沒通過,會直接跳出當前攔截器,繼續執行上個攔截器的 afterCompletion

16:14:23,981 INFO HandleInterceptor1:20 - HandleInterceptor1 ...... preHandle
16:14:23,981 INFO HandleInterceptor2:20 - HandleInterceptor2 ...... preHandle
16:14:23,982 INFO HandleInterceptor1:38 - HandleInterceptor1 ...... afterCompletion

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

祁门县| 石景山区| 大厂| 敖汉旗| 英山县| 广丰县| 连州市| 宜黄县| 天祝| 花莲市| 海丰县| 青州市| 博湖县| 清丰县| 兰西县| 景德镇市| 桃园县| 阜新市| 新乡县| 通渭县| 社会| 丹凤县| 临漳县| 崇明县| 延吉市| 丹寨县| 雷山县| 廉江市| 武冈市| 五大连池市| 津市市| 祁门县| 北宁市| 天津市| 丹凤县| 宜宾市| 潢川县| 东丽区| 丹寨县| 东乌珠穆沁旗| 内黄县|