SpringMVC項目中,如果定義多個攔截器。形成攔截器鏈。執行順序與註冊順序一致
<!--聲明攔截器對象-->
<mvc:interceptors>
<!--第一個攔截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.bjpowernode.handle.Myinterceptor"></bean>
</mvc:interceptor>
<!--第二個攔截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.bjpowernode.handle.Myinterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--其中mvc:mapping 表示匹配的請求路徑即所需要攔截的路徑。
bean 標籤指定的class路徑表示創建一個攔截器對象。-->
第一個攔截器
package com.bjpowernode.handle;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 2019/09/03
*/
public class Myinterceptor implements HandlerInterceptor {
/**
*preHandel 表示攔截器執行的方法 handle 表示
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("執行攔截器的prehandle ---11111111111方法 ");
//如果返回值是false則整個請求結束
return true;
}
//modelAndView 表示控制器的返回結果
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
System.out.println("執行攔截器的 postHandle ---11111111111方法 ");
//postHandle 可以修改 modelAndview 結果
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("執行攔截器的afterCompletion ---11111111111方法 ");
}
}
第二個攔截器
package com.bjpowernode.handle;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 2019/09/03
*/
public class Myinterceptor2 implements HandlerInterceptor {
/**
*preHandel 表示攔截器執行的方法 handle 表示
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("執行攔截器的prehandle ------2222222方法 ");
return true;
}
//modelAndView 表示控制器的返回結果
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
System.out.println("執行攔截器的 postHandle ------2222222方法 ");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("執行攔截器的afterCompletion ------2222222方法 ");
}
}
其中當我們定義的攔截器中有一個攔截器的preHandle方法的返回值是false時,此時攔截器鏈會立即停止執行。當preHandle的返回值爲false的時候整個請求就結束了。