拦截器的执行顺序

来源:互联网 发布:迷人的保姆 知乎 编辑:程序博客网 时间:2024/06/04 20:05

这里写图片描述

1. 依次建立3个拦截器

public class BootInterceptor implements HandlerInterceptor {    /* 1 */    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) {        StackTraceElement se = Thread.currentThread().getStackTrace()[1];        LogCore.BASE.debug("{} {}", se.getClassName().substring(se.getClassName().lastIndexOf(".")), se.getMethodName());        return true;    }    /* 3 */    public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object arg2, Exception arg3)            throws Exception {        StackTraceElement se = Thread.currentThread().getStackTrace()[1];        LogCore.BASE.debug("{} {}", se.getClassName().substring(se.getClassName().lastIndexOf(".")), se.getMethodName());    }    /* 2 */    public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2, ModelAndView arg3)            throws Exception {        StackTraceElement se = Thread.currentThread().getStackTrace()[1];        LogCore.BASE.debug("{} {}", se.getClassName().substring(se.getClassName().lastIndexOf(".")), se.getMethodName());    }}

2. 配置拦截器

@Configurationpublic class BootWebAppConfig extends WebMvcConfigurerAdapter {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new BootInterceptor()).addPathPatterns("/**");        registry.addInterceptor(new BootInterceptor2()).addPathPatterns("/**");        registry.addInterceptor(new BootInterceptor3()).addPathPatterns("/**");        super.addInterceptors(registry);    }}

3. 访问一个URI查看拦截器的执行顺序

BootInterceptor preHandleBootInterceptor2 preHandleBootInterceptor3 preHandle执行代码。。。。。BootInterceptor3 postHandleBootInterceptor2 postHandleBootInterceptor postHandleBootInterceptor3 afterCompletionBootInterceptor2 afterCompletionBootInterceptor afterCompletion
原创粉丝点击