標籤:spring mvc interceptor 攔截器
Spring MVC也可以使用攔截器對請求進行攔截處理,使用者可以自訂攔截器來實現特定的功能,自訂的攔截器必須實現HandlerInterceptor介面。
直接看下例子:
package com.ztz.springmvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class MyInterceptor implements HandlerInterceptor{/** * 業務處理器處理之前被調用,被攔截返回false,反之能正常到Controller層 */@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("====preHandle====");//如果返回false將不會到Controller層return true;}/** * 在業務處理完成請求後,在DispatcherServlet向用戶端返迴響應前被調用 */@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("======postHandle=====");}/** * 在DispatcherServlet完全處理完請求後被調用(可以在該方法進行一些資源的清理操作) */@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("=====afterCompletion=======");}}
package com.ztz.springmvc.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/interceptor")public class MyInterceptorController {@RequestMapping("/inter1")private String interceptor1(){System.out.println("=====inter1=====");return "index";}@RequestMapping("/inter2")private String interceptor2(){System.out.println("======inter2=====");return "index";}}
<!--預設的mvc註解映射的支援 --><mvc:annotation-driven /><!-- 處理對靜態資源的請求 --><mvc:resources location="/static/" mapping="/static/**" /><!-- 掃描註解 --><context:component-scan base-package="com.ztz.springmvc.controller" /><!-- 視圖解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><!-- 首碼 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 尾碼 --><property name="suffix" value=".jsp" /></bean><!-- 攔截器配置 --><mvc:interceptors><!-- 多個攔截器,順序執行 --><mvc:interceptor><!-- 需要攔截的url --><mvc:mapping path="/interceptor/*" /><!-- 攔截器實作類別 --><bean class="com.ztz.springmvc.interceptor.MyInterceptor" /></mvc:interceptor></mvc:interceptors>
瀏覽器請求:http://127.0.0.1:8080/springmvc/interceptor/inter1
控制台輸出:
====preHandle====
=====inter1=====
======postHandle=====
=====afterCompletion=======
我們看到<mvc:mapping path="/interceptor/*" />攔截的是/interceptor/路徑下所有的請求,那麼現在我不想攔截 /interceptor/inter2這個請求怎麼辦,這個很好實現的,只需要加一個配置。
<!-- 攔截器配置 --><mvc:interceptors><!-- 多個攔截器,順序執行 --><mvc:interceptor><!-- 需要攔截的url --><mvc:mapping path="/interceptor/*" /><!-- 不攔截該請求 --><mvc:exclude-mapping path="/interceptor/inter2"/><!-- 攔截器實作類別 --><bean class="com.ztz.springmvc.interceptor.MyInterceptor" /></mvc:interceptor></mvc:interceptors>
瀏覽器請求:http://127.0.0.1:8080/springmvc/interceptor/inter2
控制台輸出:
======inter2=====
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
springmvc自訂攔截器