springmvc自訂攔截器

來源:互聯網
上載者:User

標籤: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自訂攔截器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.