一. 攔截器的概念和作用
-
-
作用:
-
在指定的方法調用前后執行預先設定的代碼
-
阻止原始方法的執行
-
總結:增強
-
-
核心原理:AOP思想
二. 攔截器和過濾器的區別
-
-
攔截內容不同: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/*");
}
}
