一、新增拦截器配置类
@Configurationpublic class WebAppInterceptorConfig extends WebMvcConfigurerAdapter { /** * 拦截器链(多个拦截器) * * @param registry registry */ @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration ir_a = registry.addInterceptor(new OneInterceptor_a()); // 设置拦截规则 ir_a.addPathPatterns("/**"); // 设置无需拦截的路径规则 ir_a.excludePathPatterns("/one/index"); InterceptorRegistration ir_b = registry.addInterceptor(new OneInterceptor_b()); ir_b.addPathPatterns("/**"); super.addInterceptors(registry); }}
二、新建拦截器类
public class OneInterceptor_a implements HandlerInterceptor { /** * 在请求处理之前执行该方法 * * @param request request * @param response response * @param handler handler * @return boolean * @throws Exception Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("Interceptor:[a-preHandle]>>>在请求处理之前进行调用(Controller方法调用之前)"); // 判断是否是Ajax请求,如果是,不拦截。 if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { return true; } // 输出调用的类名和方法名 if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; System.out.println("Interceptor:[a-preHandle]>>>请求控制器名称:" + handlerMethod.getBean().getClass().getName()); System.out.println("Interceptor:[a-preHandle]>>>请求方法名称:" + handlerMethod.getMethod().getName()); } return true; } /** * 在请求处理之后,在视图渲染之前执行该方法 * * @param request request * @param response response * @param handler handler * @param modelAndView modelAndView * @throws Exception Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // System.out.println("Interceptor:[a-postHandle]>>>请求处理之后、在视图被渲染之前进行调用(Controller方法调用之后)"); } /** * 整个请求处理结束,视图渲染之后执行该方法 * * @param request request * @param response response * @param handler handler * @param e e * @throws Exception Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) throws Exception { // System.out.println("Interceptor:[a-afterCompletion]>>>在整个请求结束之后被调用," + // "DispatcherServlet渲染了对应的视图之后执行(主要进行资源清理)"); }}
OneInterceptor_b同理