Springboot中自定义springmvc拦截器;HandlerInterceptor中preHandle,postHandle,afterCompletion解析

要实现自定义HandlerInterceptor 。通过 WebMvcConfigurer 的实现类属性注入,完成springboot自定义拦截

自定义一个拦截器;

package com.baidu.interceptor;
/**
 * @auther SyntacticSugar
 * @data 2018/11/2 0002下午 2:51
 */
public class LoginInterceptor implements HandlerInterceptor {
    private Logger logger=LoggerFactory.getLogger((LoginInterceptor.class));
    //  配置一个 interceptor
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            logger.debug("preHandle is  running");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.debug("postHandle is  running");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.debug("afterCompletion is  running");
    }
}

注入自定义的拦截器;

package com.baidu.config;
/**
 * @auther SyntacticSugar
 * @data 2018/11/2 0002下午 2:49
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {
        //  注入拦截器
    @Bean
    public LoginInterceptor getLoginInterceptor(){
        return  new LoginInterceptor();
    }
        //   把自定义的拦截器添加到mvc 配置中
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.getLoginInterceptor()).addPathPatterns("/**");
    }
}

*访问web服务器; *
Springboot中自定义springmvc拦截器;HandlerInterceptor中preHandle,postHandle,afterCompletion解析

HandlerInterceptor 查看源码如下:

(1) 第一个preHandle

	default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		return true;
	}

Springboot中自定义springmvc拦截器;HandlerInterceptor中preHandle,postHandle,afterCompletion解析
在HandlerMapping之后执行,HandlerAdapter之前,返回结果 true

(2) 第二个postHandle

	default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
	}

Springboot中自定义springmvc拦截器;HandlerInterceptor中preHandle,postHandle,afterCompletion解析
在HandlerAdapter 之后,在DispatcherServlet之前调用,并且通过ModelAndView 视图解析器解析 视图 model object;

(3) 第三个afterCompletion

default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
	}

Springboot中自定义springmvc拦截器;HandlerInterceptor中preHandle,postHandle,afterCompletion解析
request处理完成之后,回调函数,获取解析视图;