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

攔截器與過濾器區(qū)別
歸屬不同:Filter屬于Servlet技術,Interceptor屬于SpringMVC技術
攔截內(nèi)容不同:Filter對所有的訪問進行增強,Interceptor僅針對SpringMVC的訪問進行增強
二、攔截器入門案例
1、聲明攔截器的bean,并實現(xiàn)HandlerInterceptor接口(注意:掃描加載bean)
@Component
//定義攔截器類,實現(xiàn)HandlerInterceptor接口
//注意當前類必須受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {
@Override
//原始方法調(diào)用前執(zhí)行的內(nè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、定義配置類,繼承WebMvcConfigurationSupport,實現(xiàn)addInterceptor(注意掃描加載配置)
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
。。。
}
}
3、添加攔截器并設定攔截的訪問路徑,路徑可以通過可變參數(shù)設置多個
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Autowired
private ProjectInterceptor projectInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//配置攔截器
registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
}
}
4、使用標準接口WebMvcConfigurer簡化開發(fā)(注意:侵入式較強)
@Configuration
@ComponentScan({"com.itheima.controller"})
@EnableWebMvc
//實現(xiàn)WebMvcConfigurer接口可以簡化開發(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,說明攔截器不放行該請求,自己處理或者結(jié)束該請求。如果返回true,說明攔截器放行該請求,由其它匹配的攔截器或者控制器繼續(xù)處理。
postHandle():該方法在控制器方法調(diào)用之后,且解析視圖之前執(zhí)行,可以通過此方法對請求域中的模型和視圖做出進一步的修改。
afterCompletion():該方法會在整個請求完成,即視圖渲染結(jié)束之后執(zhí)行。
到此這篇關于詳解SpringMVC中攔截器的概念及入門案例的文章就介紹到這了,更多相關SpringMVC攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java字符串日期類Date和Calendar相互轉(zhuǎn)化及相關常用方法
Java語言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分,下面這篇文章主要給大家介紹了關于java字符串日期類Date和Calendar相互轉(zhuǎn)化及相關常用方法的相關資料,需要的朋友可以參考下2023-12-12
Shiro中session超時頁面跳轉(zhuǎn)的處理方式
這篇文章主要介紹了Shiro中session超時頁面跳轉(zhuǎn)的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
SpringBoot+隨機鹽值+雙重MD5實現(xiàn)加密登錄
數(shù)據(jù)加密在很多項目上都可以用到,大部分都會采用MD5進行加密,本文主要介紹了SpringBoot+隨機鹽值+雙重MD5實現(xiàn)加密登錄,具有一定的參考價值,感興趣的可以了解一下2024-02-02

