一、spring拦截器应用
1、建立interceptor包,在此包下建立Interceptor类。以处理Ajax跨域请求为例写一个拦截器
继承HandlerInterceptor接口,此接口有3个方法:
preHandle:
预处理,返回true表示流程继续,返回false表示不会继续处理(流程中断)
postHandle:
后处理回调方法,发生在视图渲染之前。参数ModelAndView可以为空,不为空时会对数据进行处理或者视图渲染。
afterCompletion:
整个请求处理完毕回调方法,即在视图渲染完毕时回调。
以上三个方法对应整个http请求周期进行拦截:
preHandle:
request请求到达DispatcherServlet(控制层)之前(Controller方法调用之前)
postHandle:
response返回之后进行调用,但是在视图被渲染之前(Controller方法返回之后,还没有渲染到页面之前)
afterCompletion:
在整个请求结束之后被调用,也就是在DispatcherServlet
渲染了对应的视图之后执行(主要是用于进行资源清理工作)
2、注册拦截器到spring容器中
实现WebMvcConfigurer 接口,在重写的addInterceptors方法中,注册对应的拦截器
“new interceptor()”也可以写成自动装配的方式。
.addPathPatterns("/**");是用来指定要拦截的路径。
excludePathPatterns 用于排除要绕开的路径
多个拦截器按照先后顺序组成一个拦截器链
二、spring过滤器应用
1、注解方式
(1)、定义一个过滤器配置类,用@Component注解放入spring容器中,用
@WebFilter注解指定过滤路径,实现Filter 接口,重写接口方法
这种注解的方式,指定不了顺序。
2、bean注入方式
(1)、自定义filter
(2)、在springboot启动类或者@Configuration配置类上配置一个过滤的bean
用FilterRegistrationBean来注册过滤器
可以利用ilter.setOrder(1);来指定过滤器顺序。