1. 程式人生 > >Spring MVC 攔截器

Spring MVC 攔截器

被調用 clas class 表現 進入 截器 exclude oid ssi

Interceptor攔截器用於攔截Controller層接口,表現形式有點像Spring的AOP,但是AOP是針對單一的方法。Interceptor是針對Controller接口以及可以處理request和response對象。比如在沒有登錄的情況下,會攔截訪問系統的請求,一般來說攔截對象會除去登錄頁面以及靜態文件。配置代碼如下:

<mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login/**"/>
            <mvc:exclude-mapping path="
/css/**"/> <mvc:exclude-mapping path="/js/**"/> <mvc:exclude-mapping path="/images/**"/> <mvc:exclude-mapping path="/api/**"/> <bean class="org.imooc.controller.interceptor.SessionInterceptor"></bean> </mvc:interceptor>

HandlerInterceptor接口定義了三個方法,分別是preHandle、postHandle、afterCompletion:

public interface HandlerInterceptor {

    boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception;

    void postHandle(
            HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception;

    
void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; }

preHandle在進入Controller之前被調用,當preHandle返回true會執行下一個攔截器,當所有攔截器執行完再調用被攔截的Controller;當preHandle返回false會往回執行所有攔截器的afterCompletion,再退出攔截器鏈

postHandle是調用Controller之後被調用,但是在渲染View頁面之前。

afterCompletion是調用完Controller接口,渲染View頁面最後調用。返回true的攔截器都會調用該攔截器的afterCompletion方法,順序相反。

Spring MVC 攔截器