1. 程式人生 > 程式設計 >SpringMVC攔截器配置及執行流程解析

SpringMVC攔截器配置及執行流程解析

1.與過濾器filter的區別

SpringMVC攔截器配置及執行流程解析

2.springMVC中攔截器的必須實現的三個方法:

SpringMVC攔截器配置及執行流程解析

SpringMVC攔截器配置及執行流程解析

3. 攔截器類的編寫:

package com.imooc.core;

import com.imooc.bean.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class LoginInterceptor implements HandlerInterceptor {


  //在業務處理器被呼叫前的方法,若是返回false則不會繼續進入業務處理器
  public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {
    User user = (User)request.getSession().getAttribute("session_user");
    if(user==null) {
      response.sendRedirect(request.getContextPath()+"/login");
      return false;//會終止所有的請求
    }
    return true;
  }

  //在業務處理器被呼叫後,dispatcher響應客戶端前的方法,一般用於生成日誌檔案時呼叫
  public void postHandle(HttpServletRequest request,Object handler,ModelAndView modelAndView) throws Exception {

  }

  //dispatcher響應客戶端後的方法,一般用於資源的清理
  public void afterCompletion(HttpServletRequest request,Exception ex) throws Exception {

  }
}

4.在spring的配置檔案中註冊攔截器:

<!-- 攔截器的註冊 -->
  <mvc:interceptors>
    <mvc:interceptor>
       <!--**表示往後的所有子目錄也包括進來-->
      <mvc:mapping path="/user/**"></mvc:mapping>
      <!--exclude-mapping在所有攔截中進行排除,一般在萬用字元會有意義。-->
      <!--即以下的方法不會被攔截-->
      <mvc:exclude-mapping path="/user/updatepwd"></mvc:exclude-mapping>
      <mvc:exclude-mapping path="/user/updatebackground/*"></mvc:exclude-mapping>
      <!--填寫之前配置好的攔截器-->
      <bean class="com.imooc.core.LoginInterceptor"></bean>
    </mvc:interceptor>
  </mvc:interceptors>

注意:要是有多個攔截器執行順序以spring的配置檔案中的註冊攔截器順序執行:

<!-- 攔截器的註冊 -->
  <mvc:interceptors>

    <!--先註冊先執行-->
    <mvc:interceptor>
      <mvc:mapping path="/user/**"/>
      <bean class="com.imooc.core.LogInterceptor"></bean>
    </mvc:interceptor>

    <mvc:interceptor>
      <mvc:mapping path="/user/**"></mvc:mapping>
      <!--exclude-mapping在所有攔截中進行排除,一般在萬用字元會有意義。-->
      <mvc:exclude-mapping path="/user/updatepwd"></mvc:exclude-mapping>
      <mvc:exclude-mapping path="/user/updatebackground/*"></mvc:exclude-mapping>
      <bean class="com.imooc.core.LoginInterceptor"></bean>
    </mvc:interceptor>
  </mvc:interceptors>

其次攔截器裡的方法順序:

SpringMVC攔截器配置及執行流程解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。