1.拦截器的概念
拦截器是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。
作用
- 在指定的方法调用前后执行预先设定的代码
- 阻止原始方法的执行
2.拦截器和过滤器的区别
- 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
- 拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpirngMVC的访问进行增强。
过滤器是在tomcat服务器阶段进行配置的,它能够对所有的访问进行增强,但是拦截器就不是这样,拦截器能访问什么取决于SpringMVC里面的配置
3.拦截器入门案例
- 制作拦截器功能类
- 配置拦截器的执行位置
拦截器是为springMVC服务的,创建的拦截器要受spring容器的管理,因此需要给下面的ProjectInterceptor类前面加上注解@Component进行扫描加载。
3.拦截器入门案例小结
1.配置拦截器类。一般放在controller目录下,记得加@Component注解将其配置成bean并在spring配置文件中进行扫描加载
2.定义拦截器配置类,并记得加上@Configuration注解将此配置类扫描加载
3.编写拦截器配置类SpringMvcSupport配置类在该配置类里面先说加载哪个拦截器,后面addPathPatterns说明拦截哪个请求。加载拦截器的时候通过@Autowired注解以bean的形式进行注入。
4.最后拦截器配置类SpringMvcSupport配置类和spingMVC配置类SpringMvcConfig可以进行整合。将SpringMvcSupport配置类里面配置的拦截器整合到spingMVC配置类SpringMvcConfig里面 只需要实现WebMvcConfigurer接口并添加拦截器配置即可
最后再说一下拦截器的执行流程。
没有拦截器的话直接执行controller,如果有拦截器,会限制性preHandler里面的内容,如果return的值是true,则会再执行controller里面的内容接着在执行 postHandler、afterCompletion里面的内容。
如果preHandler中return的值为false则后面包括controller在内的内容将都不会被执行。