歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> SpringMVC中攔截器的使用

SpringMVC中攔截器的使用

日期:2017/3/1 9:19:50   编辑:Linux編程

什麼是攔截器

  • 攔截器通常一般指的是通過攔截從浏覽器發往服務器的一些請求來完成某些功能的一段程序代碼
  • 一般在一個請求發生之前,發生時,發生後我們都可以對請求進行攔截

攔截器可以做什麼

攔截器可以用於權限驗證、解決亂碼、操作日志記錄、性能監控、異常處理等

自定義攔截器

可以通過繼承Spring框架中的HandlerInterceptorAdapter類,然後重寫preHandle,postHandle,afterCompletion三個方法,在三個方法中寫我們自己要想實現的業務邏輯代碼。

/**
* 自定義攔截器
* @author admol
*/
public class MyInterceptor extends HandlerInterceptorAdapter {
/**
* 在請求之前執行
* @param request
* @param response
* @param handler 表示被攔截的請求目標
* @return false:攔截請求,終止請求 true:繼續執行請求
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//業務邏輯代碼編寫...(如:解決亂碼,權限驗證)
request.setCharacterEncoding("utf-8");
return true;
}

/**
* @param modelAndView 可以對視圖進行操作
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
//業務邏輯代碼編寫...(如:操作日志記錄,更改視圖信息)
}

/**
* @param ex 異常
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
//業務邏輯代碼編寫...(如:,資源銷毀,異常處理)
}
}

a) public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
該方法在action執行前執行,可以實現對數據的預處理,比如:編碼、防重復提交安全控制等。
如果方法返回true,則繼續執行action。返回false則攔截請求

b) public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception
該方法在action執行後,生成視圖前執行。在這裡,我們有機會修改視圖層數據。

c) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
最後執行,通常用於釋放資源,處理異常。我們可以根據ex是否為空,來進行相關的異常處理。

注冊攔截器

在xml文件中配置:

<mvc:interceptors>
<bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
</mvc:interceptors>

當有多個攔截器的時候可以寫多個bean
當我們只想攔截部分指定請求時:

<mvc:interceptors>
<!-- path:需要攔截的請求,不寫時會攔截所有請求 -->
<mvc:mapping path="/*.htm" />
<bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
</mvc:interceptors>

多個攔截器

xml配置:

<mvc:interceptors>
<bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
<bean id="myInterceptor2" class="com.admol.web.MyInterceptor2" />
</mvc:interceptors>

當配置有多個攔截器的時候,會按攔截器順序執行preHandle方法,然後再倒序執行postHandle和afterCompletion方法。

其他實現方式
1.實現接口 implements HandlerInterceptor
2.實現接口 implements WebRequestInterceptor
注冊攔截器方法不變

與過濾器的區別

1.過濾器是依賴於Servlet容器,基於回調函數,Intercepto依賴與框架,基於反射機制
2.過濾器的過濾范圍更大,還可以過濾一些靜態資源,攔截器只攔截請求

Spring+SpringMVC企業快速開發架構搭建 http://www.linuxidc.com/Linux/2015-09/122942.htm

SpringMVC的亂碼處理 http://www.linuxidc.com/Linux/2015-07/120542.htm

Spring MVC+Spring3+Hibernate4開發環境搭建 http://www.linuxidc.com/Linux/2013-07/87119.htm

Spring MVC整合Freemarker基於注解方式 http://www.linuxidc.com/Linux/2013-02/79660.htm

基於注解的Spring MVC簡單介紹 http://www.linuxidc.com/Linux/2012-02/54896.htm

SpringMVC詳細示例實戰教程 http://www.linuxidc.com/Linux/2015-06/118461.htm

Spring MVC 框架搭建及詳解 http://www.linuxidc.com/Linux/2012-01/52740.htm

SpringMVC 異常處理 http://www.linuxidc.com/Linux/2015-06/119049.htm

Copyright © Linux教程網 All Rights Reserved