溫馨提示×

溫馨提示×

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

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

淺析java中 Spring MVC 攔截器作用及其實(shí)現(xiàn)

發(fā)布時(shí)間:2020-09-18 03:47:12 來源:腳本之家 閱讀:152 作者:wbb 欄目:編程語言

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

1、編寫攔截器類實(shí)現(xiàn)HandlerInterceptor接口;

2、將攔截器注冊進(jìn)springmvc框架中;

3、配置攔截器的攔截規(guī)則;

其他實(shí)現(xiàn)方法

WebRequestInterceptor接口:

與上一個(gè)的區(qū)別是參數(shù)區(qū)別和prehandle的方法沒有返回值。沒有上一個(gè)功能全,因此常用第一個(gè)。

攔截器的使用場景

 處理所有請求共性問題:

1、亂碼問題:用request,response參數(shù)去設(shè)置編碼;

2、解決權(quán)限驗(yàn)證問題(是否登陸,取session對象查看);

攔截器與過濾器的區(qū)別

1、攔截器Interceptor依賴于框架容器,基于反射機(jī)制,只過濾請求;

2、過濾器Filter依賴于Servlet容器,基于回調(diào)函數(shù),過濾范圍大;

例子

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
public class TestInterceptor implements HandlerInterceptor {
 /**
  * 返回值說明是否需要將當(dāng)前的請求攔截下來
  * false:請求將被終止
  * true:請求會被繼續(xù)運(yùn)行
  * Object handler 表示的是被攔截的請求的目標(biāo)對象
  */
 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {
  System.out.println("TestInterceptor.preHandle()");
  return true;
 }
 /**
  * modelAndView:
  *  可以通過modelAndView參數(shù)改變顯示的視圖,或者修改發(fā)往視圖的方法
  */
 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
   ModelAndView modelAndView) throws Exception {
  System.out.println("TestInterceptor.postHandle()"); 
 }
 /**
  * 在視圖加載完畢之后調(diào)用
  * 常用于作于資源的銷毀,流等
  * 類似于析構(gòu)函數(shù)
  */
 @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
   throws Exception {
  System.out.println("TestInterceptor.afterCompletion()"); 
 }
}

注冊方式:

在springmvc的Dispatcherservlet配置文件中加入攔截器代碼;

<!-- 注冊攔截器 -->
 <mvc:interceptors>
 <!-- 單個(gè)攔截器:設(shè)置具體的攔截路徑 -->
 <mvc:interceptor>
  <mvc:mapping path="/courses/view2/*">
  <bean class="com.cc.mvcdemo.interceptor.TestInterceptor"></bean>
 </mvc:mapping></mvc:interceptor>
 <!-- 第二種方式:攔截經(jīng)過當(dāng)前Dispatcherservlet的所有請求 -->
 <bean class="com.cc.mvcdemo.interceptor.TestInterceptorTwo"></bean>
 </mvc:interceptors>

希望本篇文章內(nèi)容對各位朋友有所幫助

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI