拦截器和过滤器有点像,只不过过滤器是servlet的技术,拦截器是SpringMVC的。

入门案例
制作拦截器功能类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Component public class ProjectInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); return true; }
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); }
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); } }
|
在配置类中添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Configuration @ComponentScan({"cola.controller","cola.config"}) @EnableWebMvc public class SpringMvcConfig implements WebMvcConfigurer{ @Autowired private ProjectInterceptor projectInterceptor;
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); registry.addResourceHandler("/css/**").addResourceLocations("/css/"); registry.addResourceHandler("/js/**").addResourceLocations("/js/"); registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/"); }
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*"); } }
|
控制台输出
可以看出三个方法执行的顺序。
1 2 3 4
| preHandle [INFO] {dataSource-1} inited postHandle afterCompletion
|
注意,若preHandle方法返回的是false,则会在该方法执行完成后停止。
拦截器参数
拦截器链工作流程