詳解SpringMVC中攔截器的概念及入門(mén)案例
一、攔截器概念
攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行
作用:
在指定的方法調(diào)用前后執(zhí)行預(yù)先設(shè)定的代碼
阻止原始方法的執(zhí)行

攔截器與過(guò)濾器區(qū)別
歸屬不同:Filter屬于Servlet技術(shù),Interceptor屬于SpringMVC技術(shù)
攔截內(nèi)容不同:Filter對(duì)所有的訪問(wèn)進(jìn)行增強(qiáng),Interceptor僅針對(duì)SpringMVC的訪問(wèn)進(jìn)行增強(qiáng)
二、攔截器入門(mén)案例
1、聲明攔截器的bean,并實(shí)現(xiàn)HandlerInterceptor接口(注意:掃描加載bean)
@Component
//定義攔截器類(lèi),實(shí)現(xiàn)HandlerInterceptor接口
//注意當(dāng)前類(lèi)必須受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {
@Override
//原始方法調(diào)用前執(zhí)行的內(nèi)容
//返回值類(lèi)型可以攔截控制的執(zhí)行,true放行,false終止
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle...");
return true;
}
@Override
//原始方法調(diào)用后執(zhí)行的內(nèi)容
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle...");
}
@Override
//原始方法調(diào)用完成后執(zhí)行的內(nèi)容
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion...");
}
}2、定義配置類(lèi),繼承WebMvcConfigurationSupport,實(shí)現(xiàn)addInterceptor(注意掃描加載配置)
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
。。。
}
}
3、添加攔截器并設(shè)定攔截的訪問(wèn)路徑,路徑可以通過(guò)可變參數(shù)設(shè)置多個(gè)
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Autowired
private ProjectInterceptor projectInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//配置攔截器
registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
}
}
4、使用標(biāo)準(zhǔn)接口WebMvcConfigurer簡(jiǎn)化開(kāi)發(fā)(注意:侵入式較強(qiáng))
@Configuration
@ComponentScan({"com.itheima.controller"})
@EnableWebMvc
//實(shí)現(xiàn)WebMvcConfigurer接口可以簡(jiǎn)化開(kāi)發(fā),但具有一定的侵入性
public class SpringMvcConfig implements WebMvcConfigurer {
@Autowired
private ProjectInterceptor projectInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//配置攔截器
registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
}
}
攔截器執(zhí)行流程


preHandle() :該方法在控制器方法之前執(zhí)行,如果返回false,說(shuō)明攔截器不放行該請(qǐng)求,自己處理或者結(jié)束該請(qǐng)求。如果返回true,說(shuō)明攔截器放行該請(qǐng)求,由其它匹配的攔截器或者控制器繼續(xù)處理。
postHandle():該方法在控制器方法調(diào)用之后,且解析視圖之前執(zhí)行,可以通過(guò)此方法對(duì)請(qǐng)求域中的模型和視圖做出進(jìn)一步的修改。
afterCompletion():該方法會(huì)在整個(gè)請(qǐng)求完成,即視圖渲染結(jié)束之后執(zhí)行。
到此這篇關(guān)于詳解SpringMVC中攔截器的概念及入門(mén)案例的文章就介紹到這了,更多相關(guān)SpringMVC攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)OpenGL ES紋理映射的方法
這篇文章主要介紹了java實(shí)現(xiàn)OpenGL ES紋理映射的方法,以實(shí)例形式較為詳細(xì)的分析了紋理映射的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06
java字符串日期類(lèi)Date和Calendar相互轉(zhuǎn)化及相關(guān)常用方法
Java語(yǔ)言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分,下面這篇文章主要給大家介紹了關(guān)于java字符串日期類(lèi)Date和Calendar相互轉(zhuǎn)化及相關(guān)常用方法的相關(guān)資料,需要的朋友可以參考下2023-12-12
Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式
這篇文章主要介紹了Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
SpringBoot+隨機(jī)鹽值+雙重MD5實(shí)現(xiàn)加密登錄
數(shù)據(jù)加密在很多項(xiàng)目上都可以用到,大部分都會(huì)采用MD5進(jìn)行加密,本文主要介紹了SpringBoot+隨機(jī)鹽值+雙重MD5實(shí)現(xiàn)加密登錄,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
MyBatis實(shí)現(xiàn)三級(jí)樹(shù)查詢(xún)的示例代碼
在實(shí)際項(xiàng)目開(kāi)發(fā)中,樹(shù)形結(jié)構(gòu)的數(shù)據(jù)查詢(xún)是一個(gè)非常常見(jiàn)的需求,比如組織架構(gòu)、菜單管理、地區(qū)選擇等場(chǎng)景都需要處理樹(shù)形數(shù)據(jù),本文將詳細(xì)講解如何使用MyBatis實(shí)現(xiàn)三級(jí)樹(shù)形數(shù)據(jù)的查詢(xún),需要的朋友可以參考下2024-12-12

