Spring MVC中自定義攔截器的實(shí)例講解
1. 引言
攔截器(Interceptor)實(shí)現(xiàn)對(duì)每一個(gè)請(qǐng)求處理前后進(jìn)行相關(guān)的業(yè)務(wù)處理,類似于Servlet的Filter。
我們可以讓普通的Bean實(shí)現(xiàn)HandlerIntercpetor接口或繼承HandlerInterceptorAdapter類來(lái)實(shí)現(xiàn)自定義攔截器。
通過(guò)重寫WebMvcConfigurerAdapter的addIntercetors方法來(lái)注冊(cè)一個(gè)計(jì)算每一次請(qǐng)求的處理時(shí)間的攔截器。
2. 自定義攔截器的實(shí)現(xiàn)
2.1 定義攔截器
新建LogInterceptor類,并繼承HandlerInterceptorAdapter類,重寫preHandle、postHandle這兩個(gè)方法。
1.preHandle方法表示在請(qǐng)求發(fā)生前執(zhí)行,內(nèi)容如下:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { request.setAttribute("begin", System.currentTimeMillis()); return true; }
2.postHandle方法表示在請(qǐng)求完成后執(zhí)行,內(nèi)容如下:
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long begin = (long)request.getAttribute("begin"); request.removeAttribute("begin"); long end = System.currentTimeMillis(); System.out.println("本次請(qǐng)求消耗時(shí)間為:"+new Long(end-begin)+"ms"); }
2.2 配置攔截器
2.2.1 使用xml配置
1.在配置文件中添加支持MVC的schema
xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
2.使用mvc:interceptors標(biāo)簽聲明攔截器
<mvc:interceptors> <!-- 使用bean定義一個(gè)Interceptor,直接定義在mvc:interceptors根下面的Interceptor將攔截所有的請(qǐng)求 --> <bean class="org.aming.demo.springmvc.interceptor.LogInterceptor"/> <mvc:interceptor> <mvc:mapping path="${指定的URL}"/> <!-- 定義在mvc:interceptor下面的表示是對(duì)特定的請(qǐng)求才進(jìn)行攔截的 --> <bean class="${其他攔截器}"/> </mvc:interceptor> </mvc:interceptors>
說(shuō)明:沒(méi)有測(cè)試過(guò)?。。?/span>
2.2.2 使用JavaConfig配置
3.配置攔截器的Bean
@Bean public LogInterceptor logInterceptor() { return new LogInterceptor(); }
4.重寫addInterceptors方法,注冊(cè)攔截器
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(logInterceptor()); }
說(shuō)明:配置類需要繼承WebMvcConfigurerAdapter類
3. 運(yùn)行結(jié)果
以上這篇Spring MVC中自定義攔截器的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決SpringBoot多模塊發(fā)布時(shí)99%的問(wèn)題
本文歸納了以下 8 個(gè)原則和發(fā)布時(shí)經(jīng)常出現(xiàn)的 4 個(gè)問(wèn)題的解決方案,掌握了這些原則和解決方案,幾乎可以解決絕大數(shù)SpringBoot發(fā)布問(wèn)題2019-07-07Java中if語(yǔ)句return用法和有無(wú)括號(hào)的區(qū)別
本文主要介紹了Java中if語(yǔ)句return用法和有無(wú)括號(hào)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12Java?數(shù)據(jù)庫(kù)連接池Druid?的介紹
這篇文章主要給大家分享的是?Java?數(shù)據(jù)庫(kù)連接池Druid?的介紹,Druid是一個(gè)JDBC組件,它包括三部分:?DruidDriver?代理Driver,能夠提供基于Filter-Chain模式的插件體系。?DruidDataSource?高效可管理的數(shù)據(jù)庫(kù)連接池,下面來(lái)看看文中的詳細(xì)內(nèi)容,需要的朋友也可以參考一下2021-11-11使用Java 8中的Lambda表達(dá)式實(shí)現(xiàn)工廠模式
這篇文章主要給大家介紹了使用Java 8中的Lambda表達(dá)式實(shí)現(xiàn)工廠模式的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04Java行為型設(shè)計(jì)模式之外觀設(shè)計(jì)模式詳解
外觀模式為多個(gè)復(fù)雜的子系統(tǒng),提供了一個(gè)一致的界面,使得調(diào)用端只和這個(gè)接口發(fā)生調(diào)用,而無(wú)須關(guān)系這個(gè)子系統(tǒng)內(nèi)部的細(xì)節(jié)。本文將通過(guò)示例詳細(xì)為大家講解一下外觀模式,需要的可以參考一下2022-11-11Spring Cloud Alibaba Nacos Config進(jìn)階使用
這篇文章主要介紹了Spring Cloud Alibaba Nacos Config進(jìn)階使用,文中使用企業(yè)案例,圖文并茂的展示了Nacos Config的使用,感興趣的小伙伴可以看一看2021-08-08