詳解SpringMVC中攔截器的概念及入門案例
一、攔截器概念
攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行
作用:
在指定的方法調(diào)用前后執(zhí)行預(yù)先設(shè)定的代碼
阻止原始方法的執(zhí)行
攔截器與過濾器區(qū)別
歸屬不同:Filter屬于Servlet技術(shù),Interceptor屬于SpringMVC技術(shù)
攔截內(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è)定攔截的訪問路徑,路徑可以通過可變參數(shù)設(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í)行。
到此這篇關(guān)于詳解SpringMVC中攔截器的概念及入門案例的文章就介紹到這了,更多相關(guān)SpringMVC攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決mybatis where-if中if不能識別大寫AND,OR的問題
這篇文章主要介紹了解決mybatis where-if中if不能識別大寫AND,OR的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02Springboot使用redisson實現(xiàn)分布式鎖的代碼示例
在實際項目中,某些場景下可能需要使用到分布式鎖功能,那么實現(xiàn)分布式鎖有多種方式,常見的如mysql分布式鎖、zookeeper分布式鎖、redis分布式鎖,本文介紹springboot如何使用redisson實現(xiàn)分布式鎖,需要的朋友可以參考下2023-06-06Spring Web零xml配置原理以及父子容器關(guān)系詳解
這篇文章主要介紹了Spring Web零xml配置原理以及父子容器關(guān)系詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08