天天看點

初學springMVC的攔截器

springMvc攔截器的執行順序!

初學springMVC的攔截器

攔截器的各個方法的作用:

     /** * 登入驗證攔截器 */

     public class Intercepter implements HandlerInterceptor {

    /*

* 執行時機:視圖已經被解析完畢,類似try catch 後的finally,追蹤錯誤
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception {

    }

    /**
     * 執行時機:controller執行完,視圖解析器沒有把視圖解析成頁面,
     * 對視圖做統一的修改,主要展現在Model上,可以追加資料  
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception {
      Map<String,Object> map=mv.getModel();
      map.put("test","append something");
    }

    /**
     * 執行時機:在執行controller之前來執行
     * 傳回值類型:boolean:true代表放行可以通路controller,false不可以通路controller
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
        
        return false;
    }
}      

寫了兩個攔截器,配置如下:

<!-- 配置攔截器 -->  
    <mvc:interceptors>  
      <!-- 多個攔截器,順序執行   -->
      <mvc:interceptor>  
          <mvc:mapping path="/**"/><!-- 表示所有的url,包括子url路徑 --><!-- 某一子產品的攔截:/myPath/**, 攔截所有的請求/**-->
              <bean class="com.interceptors.EncodingInterceptor"></bean>  
      </mvc:interceptor>  
      <!--配置登陸攔截器   -->
          <mvc:interceptor>  
              <mvc:mapping path="/**"/>  
                  <bean class="com.interceptors.LoginHandlerIntercepter"></bean>  
          </mvc:interceptor>  
    </mvc:interceptors>      

沒寫什麼邏輯,就列印了log,LoginHandlerIntercepter中的log是01

結果簡略如下:

preHandle.........
preHandle01.........
...
...
...
postHandle01.........
postHandle.........
...
...
...
afterCompletion01.........
afterCompletion.........      

可以看出,按照攔截器的配置順序先執行了字元攔截器,後執行了登入驗證的攔截器;

但是:preHandler是按照攔截器的配置順序執行的,而postHandler和afterCompletion是按照攔截器的配置順序的倒序執行的

是以 :
         如果統一日志處理器攔截器,需要改攔截器prehandler一定要傳回true,且将它放在攔截器配置的第一個位置;
         如果登陸認證攔截器,放在攔截器的配置中的第一個位置(有日志處理的話,放在日志處理下面);
         如果有權限校驗攔截器,則放在登陸攔截器之後,因為登陸通過後,才可以進行校驗權限;      

繼續閱讀