1、拦截器简历:
拦截器与过滤器的区别:
2、拦截器入门案例:
(1)创建相应的类并配置注解让其被扫描:
代码:
//添加注解 自动扫描
@Component
//拦截器
public class ProjectInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle...执行前");
return true;
// if 为 return false; 终止原始操作
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle...执行后");
// HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion...完成之后");
// HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
(2)在SpringMvc配置中加上@ComponentScan({"com.lingnan.controller.interceptor")才可以改拦截器所在的类的路径
(3)再创建一个配置类SpringMvcSupport:
代码:
@Configuration
//请求页面会被SpringMvc拦截,要对其进行开放
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Autowired
private ProjectInterceptor projectInterceptor;
@Override
//释放资源
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
}
@Override
//添加拦截器 并对相应的路径访问进行拦截
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(projectInterceptor).addPathPatterns("/ToJumpPage");
}
}
具体相应的流程:
为了简化开发,可以将上述的创建SpringMvcSupport类替换掉的方式:
3、拦截器执行流程:
4、拦截器参数:
![](https://i-blog.csdnimg.cn/blog_migrate/7a0acb2d3498d36aa2a8f3d7aede9a51.png)
5、 拦截器链配置:
对于某一个访问设置多个拦截器:
代码:
//创建springmvc的配置文件,加载controller对应的bean
@Configuration
@ComponentScan({"com.lingnan.controller.interceptor","com.lingnan.config"})
//开启了由json数据转换为对象的功能
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
@Autowired
private ProjectInterceptor projectInterceptor;
@Autowired
private ProjectInterceptor2 projectInterceptor2;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(projectInterceptor).addPathPatterns("/books");
registry.addInterceptor(projectInterceptor2).addPathPatterns("/books");
}
}