SpringMVC攔截器

攔截器的做用?

攔截器用於對瀏覽器到服務器的請求數據或者服務器到瀏覽器的返回數據作一些更改,或者對請求數據作一些加強spring

攔截器的原理和使用

工做原理:過濾器相似。

使用

  • 編寫攔截器類,繼承HandlerInterceptor接口。
  • 在servlet文件中註冊攔截器。
  • 配置攔截器的攔截規則
    <mvc:interceptors>瀏覽器

    <mvc:interceptor>
        <mvc:mapping path="/hello3"/>
        <!-- 定義在mvc:interceptor下面的表示是對特定的請求才進行攔截的 -->
        <bean class="interceptor.Test1Interceptor"/>
    </mvc:interceptor>

    </mvc:interceptors>服務器

攔截器的方法介紹

  • preHandler,請求被處理以前調用
    有返回值,返回值表示是否將請求攔截下來,若返回false,則將請求攔截下來,不會到達控制器以及後續方法
  • postHandler,請求被處理後進行調用
    能夠經過ModelAndView參數來改變顯示的視圖,或修改發往視圖的方法,以下所示:

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {mvc

System.out.println("postHandle");
modelAndView.addObject("name","被攔截器修改後的消息");

}app

  • afterCompletion,在請求結束以後,即視圖顯示出來以後,才進行調用。相似於其餘語言的析構函數。最重要的做用是進行一些資源的銷燬、關閉一些流等。並不會常常用到。

多個攔截器工做流程圖

clipboard.png

springMVC攔截器的使用場景

使用原則:處理全部請求的共同問題框架

1.解決亂碼問題jsp

2.解決權限驗證問題函數

在preHandle方法中對用戶是否登陸進行判斷,若未登陸,則跳轉至登陸頁面:post

if(args.getSession.getAttribute("user")==null){
arg0.getRequestDispatcher("/login.jsp").forward(arg0,arg1);
return false;
}
return true;spa

springMVC攔截器的對比和總結

過濾器Filter依賴於servlet容器,基於回調函數,過濾範圍大

攔截器Interceptor依賴於框架容器,基於反射機制,只過濾請求。

只是記錄下知識點,參考自https://zhuanlan.zhihu.com/p/...

相關文章
相關標籤/搜索