Spring Boot 拦截器 Interceptor使用

1、定义自己的拦截器类MyInterceptor,按需实现HandlerInterceptor中的接口

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

preHandle:进行处理器拦截用的;该方法将在Controller处理之前进行调用,即在请求发生前执行
postHandle:进行处理器拦截用的;该方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。在Controller处理器进行处理之后,即在请求完成后执行
afterCompletion:用于清理资源;该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行。

2、将拦截器注入到配置类

定义继承自WebMvcConfigurationSupport的配置类,重写addInterceptors,将拦截器注入,注意加@Configuration

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        //这里踩过坑,项目编译的war包名称是不包含在内的,比如需要拦截项目名为AAA的war包中的所有接口,填写"/**",而不是"AAA/**"
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/xxx");
        super.addInterceptors(registry);
    }
}

addPathPatterns("/**"):项目中所有接口都会进入拦截器preHandle。
excludePathPatterns("/xxx"):排除掉xxx接口,不会进入preHandle在这里插入图片描述
参考链接:https://blog.csdn.net/weixin_41767154/article/details/84648873

你可能感兴趣的:(java,java,spring,boot)