Java中的攔截器


一. 攔截器的概念和作用

  • 攔截器(Interceptor)是一種動態攔截方法調用的機制,在SpringMVC中動態攔截控制器方法的執行

  • 作用:

    1. 在指定的方法調用前后執行預先設定的代碼

    2. 阻止原始方法的執行

    3. 總結:增強

  • 核心原理:AOP思想

 二. 攔截器和過濾器的區別

  • 歸屬不同:Filter屬於Servlet技術,Interceptor屬於SpringMVC技術

  • 攔截內容不同:Filter對所有訪問進行增強,Interceptor僅針對SpringMVC的訪問進行增強

三. 攔截器代碼實現

【第一步】定義攔截器

做法:定義一個類,實現HandlerInterceptor接口即可

@Component //注意當前類必須受Spring容器控制
//定義攔截器類,實現HandlerInterceptor接口
public class ProjectInterceptor implements HandlerInterceptor {


@Override
//原始方法調用前執行的內容
//返回值類型可以攔截控制的執行,true放行,false終止
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  System.out.println("preHandle..."+contentType);
  return true;
}

@Override
//原始方法調用后執行的內容
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  System.out.println("postHandle...");
}

@Override
//原始方法調用完成后執行的內容
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  System.out.println("afterCompletion...");
  }
}

【第二步】配置加載攔截器

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
  @Autowired
  private ProjectInterceptor projectInterceptor;

  @Override
  protected void addInterceptors(InterceptorRegistry registry) {
  //配置攔截器
  registry.addInterceptor(projectInterceptor)
  .addPathPatterns("/books","/books/*");
  }
}

 

 

使用標准接口WebMvcConfigurer簡化開發(注意:侵入式較強) 

@Configuration
@ComponentScan({"com.itheima.controller"})
@EnableWebMvc
//實現WebMvcConfigurer接口可以簡化開發,但具有一定的侵入性
public class SpringMvcConfig implements WebMvcConfigurer {
  @Autowired
  private ProjectInterceptor projectInterceptor;

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
  //配置多攔截器
  registry.addInterceptor(projectInterceptor)
  .addPathPatterns("/books","/books/*");
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM