前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >过滤器和拦截器区别以及执行顺序图_压缩空气过滤器安装顺序

过滤器和拦截器区别以及执行顺序图_压缩空气过滤器安装顺序

作者头像
全栈程序员站长
发布2022-09-23 11:25:49
1780
发布2022-09-23 11:25:49
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

过滤器和拦截器区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

觉得这个总结的很好,所以用来借鉴借鉴 摘抄于网络,侵删

过滤器和拦截器执行顺序 在SpringBoot中编写测试代码

  • 自定义过滤器
代码语言:javascript
复制
/** * @Author: xiaoshijiu * @Date: 2019/5/22 * @Description: 自定义过滤器 */
public class MyFilter extends HttpFilter { 
     
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException { 
     
        System.out.println("Filter----before");  
        chain.doFilter(request,response);
        System.out.println("Filter----after");
    }
}

自定义拦截器 (有关SpringMVC的拦截器知识原理,可以参照我之前的博客) SpringMVC拦截器详解 SpringMVC拦截器执行顺序原理解释

代码语言:javascript
复制
/** * @Author: xiaoshijiu * @Date: 2019/5/22 * @Description: $value$ */
public class MyInterception implements HandlerInterceptor { 
       
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception { 
       
        System.out.println("Interception----before");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception { 
       
        System.out.println("Interception----before2");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
            Object handler, Exception ex) throws Exception { 
       
        System.out.println("Interception----after");
    }
}
  • 配置拦截器和过滤器
代码语言:javascript
复制
/** * @Author xiaoshijiu * @Description 自定义Mvc配置,实现全面接管SpringMvc的配置 * @Date 2019/5/13 */
@Configuration
public class MyWebMvc implements WebMvcConfigurer { 
       
    /** * 注册自定义的filter 就相当于在普通web工程中,在web.xml中注册的<filter></filter> */
    @Bean
    public FilterRegistrationBean myFilter() { 
       
        return new FilterRegistrationBean(new MyFilter());
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) { 
       
        // 添加自定义的拦截器
        registry.addInterceptor(new MyInterception()).addPathPatterns("/hello");
    }
}
  • 编写Controller,测试
代码语言:javascript
复制
/** * @Author: xiaoshijiu * @Date: 2019/5/22 * @Description: 测试Controller */
@RestController
public class Mycontroller { 
       

    @RequestMapping("hello")
    public String hello() { 
       
        System.out.println("hello...来了");
        return "hello";
    }
}
  • 打印结果
在这里插入图片描述
在这里插入图片描述

这里可以看到拦截器和过滤器的执行顺序,对照着上面他们的区别也是很好理解的 总结一下,执行顺序

在这里插入图片描述
在这里插入图片描述

这里还有一个问题就是发送/hello请求filter被执行了两次,我们可以获取url来判别一下 自定义过滤器添加代码

代码语言:javascript
复制
		HttpServletRequest servletRequest = (HttpServletRequest) request;
        System.out.println(servletRequest.getRequestURI());

可以看到SpringBoot项目会发送图标的请求(/favicon.ico)

在这里插入图片描述
在这里插入图片描述

最后在补充一下,request获取请求的一些方法的内容

在这里插入图片描述
在这里插入图片描述

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172388.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档