spring配置拦截器
实现WebMvcConfigurer 接口,重写 addInterceptors(InterceptorRegistry interceptorRegistry)方法,通过调用interceptorRegistry.addInterceptor(new HandlerInterceptorAdapter() ) 添加拦截器对象,通过addPathPatterns("/**")匹配拦截的路径。若不设置addPathPatterns,则当前拦截器匹配所有路径。
@Configuration
public class MvcConfigurer implements WebMvcConfigurer {
//......
/**
* 添加拦截器
*
* @param interceptorRegistry
*/
@Override
public void addInterceptors(InterceptorRegistry interceptorRegistry) {
interceptorRegistry.addInterceptor(new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("无路由拦截器");
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
});
interceptorRegistry.addInterceptor(new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("存在路由拦截器");
return super.preHandle(request, response, handler);
}
}).addPathPatterns("/**");
}
}
编写拦截器对象,继承抽象类HandlerInterceptorAdapter,或实现HandlerInterceptor接口。
重写以下三个方法
1、preHandle :在HandlerAdapter实际调用处理程序之前调用。多个拦截器配置按照先后顺序依次执行。若遇到返回false,停止整个调用链,返回结果。
2、postHandle:在HandlerAdapter实际调用处理程序之后调用,但在DispatcherServlet呈现视图之前调用。可以通过给定的ModelAndView向视图公开其他模型对象。注意:只有所有拦截器的preHandle方法成功完成并返回true时才会调用它!该方法将以相反的顺序在链中的每个拦截器上调用,因此第一个拦截器将是最后一个被调用的拦截器。
3、afterCompletion:处理程序完整执行后,包括已经视图解析以及视图与模型数据整合之后。注意:只有所有拦截器的preHandle方法成功完成并返回true时才会调用它!并且与postHandle方法一样,该方法将以相反的顺序在链中的每个拦截器上调用,因此第一个拦截器将是最后一个被调用的拦截器。