美文网首页springboot
14.SpringBoot2.X拦截器

14.SpringBoot2.X拦截器

作者: 0f701952a44b | 来源:发表于2020-04-09 10:32 被阅读0次
    1.自定义拦截器使用注解@Configuration 继承WebMvcConfigurationAdapter
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    @Configuration
    public class CustomWebMvcConfiguer implements WebMvcConfigurer{
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/v1/**");
            WebMvcConfigurer.super.addInterceptors(registry);
        }
        
    }
    
    2.自定义拦截器 HandlerInterceptor
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class LoginIntercepter implements HandlerInterceptor{
        /**
         * 进入controller方法之前
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            System.out.println("LoginIntercepter===================preHandle");
            return HandlerInterceptor.super.preHandle(request, response, handler);
        }
        /**
         * Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("LoginIntercepter===================postHandle");
            // TODO Auto-generated method stub
            HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        }
        /**
         *  不管有没有异常,这个afterCompletion都会被调用,用于资源清理
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("LoginIntercepter===================afterCompletion");
            // TODO Auto-generated method stub
            HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        }
    
    }
    
    3.拦截器按照注册顺序进行拦截,先注册,先被拦截
    4.拦截器不生效常见问题:

    1)是否有加@Configuration
    2)拦截路径是否有问题 ** 和 *
    3)拦截器最后路径一定要 “/*”, 如果是目录的话则是 //

    5.Filter与Interceptor

    Filter 是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
    Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等 依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。
    在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。 Filter和Interceptor的执行顺序 过滤前->拦截前->action执行->拦截后->过滤后

    相关文章

      网友评论

        本文标题:14.SpringBoot2.X拦截器

        本文链接:https://www.haomeiwen.com/subject/rduqmhtx.html