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服务器; *
HandlerInterceptor 查看源码如下:
(1) 第一个preHandle
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
在HandlerMapping之后执行,HandlerAdapter之前,返回结果 true
(2) 第二个postHandle
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
在HandlerAdapter 之后,在DispatcherServlet之前调用,并且通过ModelAndView 视图解析器解析 视图 model object;
(3) 第三个afterCompletion
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
request处理完成之后,回调函数,获取解析视图;