需要创建类并实现HandlerInterceptor
接口,其中有三个方法需要重现分别为preHandle()
、afterCompletion()
以及postHandle()
,分别对应前拦截,后拦截,以及进入ModelAndView后和返回前拦截
public class MyHandlerInterceptor implements HandlerInterceptor {
public static Logger logger = LoggerFactory.getLogger(MyHandlerInterceptor.class);
/**
* 前拦截,在进入ModelAndView之前拦截
* 使用场景有:身份校验,身份授权
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.debug("preHandle:前拦截");
return true;
}
/**
* 后拦截,该方法在handler方法执行完之后执行,
* 使用场景有:日志记录,管理,异常统一处理等等
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.debug("aftercompletion:后拦截");
}
/**
* 在进入ModelView后返回之前,
*
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.debug("postHandle:post拦截");
}
}
之后需要创建配置类并实现WebMvcConfigurer接口,重现addInterceptors()
方法,需要加上配置类注解
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* 添加拦截器以及添加拦截路径
*/
registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/**");
}
}
IndexController.class
@Controller
public class IndexController {
@RequestMapping("/")
@ResponseBody
public String index(){
System.out.println("index");
return "SeccussMapping";
}
}