我的编程空间,编程开发者的网络收藏夹
学习永远不晚

过滤器和拦截器的区别有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

过滤器和拦截器的区别有哪些

这篇文章主要讲解了“过滤器和拦截器的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“过滤器和拦截器的区别有哪些”吧!

Filter的使用

首先,要使用Filter,必须实现javax.servlet.Filter接口:

public interface Filter {     //web应用加载进容器,Filter对象创建之后,执行init方法初始化,用于加载资源,只执行一次。      public default void init(FilterConfig filterConfig) throws ServletException {}     //每次请求或响应被拦截时执行,可执行多次。     public void doFilter(ServletRequest request, ServletResponse response,             FilterChain chain) throws IOException, ServletException;     //web应用移除容器,服务器被正常关闭,则执行destroy方法,用于释放资源,只执行一次。     public default void destroy() {} }
  • init和destroy是default方法,实现类可以不用实现。

  • doFilter必须实现,也就是说,作为一个过滤器,doFilter必须要定义。

  • doFlilter方法中传进来的FilterChain对象用来调用下一个过滤器。

拦截器的使用

public interface HandlerInterceptor {     //拦截handler的执行 --> 在HanlerMapping决定适合的handler之后,[在HandlerAdater调用handler之前执行。]     default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)             throws Exception {      return true;     }   //拦截handler的执行 --> [在HandlerAdapter调用handler之后],在DispatcherServlet渲染视图之前执行     default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,             @Nullable ModelAndView modelAndView) throws Exception { }   //视图渲染后调用,且只有preHandle结果为true,才会调用     default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,             @Nullable Exception ex) throws Exception {  }}  //DispatcherServlet if (!mappedHandler.applyPreHandle(processedRequest, response)) {     return; //遍历所有的interceptors,调用preHandle方法,只有返回true,才能进行下去 } // 这里也就是处理Contrller mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); //视图渲染 applyDefaultViewName(processedRequest, mv); //视图渲染之后调用 mappedHandler.applyPostHandle(processedRequest, response, mv);

过滤器与拦截器到底有啥区别呢?

一、实现原理不同

过滤器的实现基于回调函数

拦截器基于Java的反射机制【动态代理】实现。

二、使用范围不同

过滤器是Servlet的规范,需要实现javax.servlet.Filter接口,Filter使用需要依赖于Tomcat等容器。

拦截器是Spring组件,定义在org.springframework.web.servlet包下,由Spring容器管理【又有更加丰富的生缪那个周期处理方法,细粒度,且能够使用Spring中的资源】,不依赖Tomcat等容器。

三、触发时机不同

这一段在HandlerInterceptor类的注释上可以发现,两者的触发时机是不同的:

过滤器和拦截器的区别有哪些
  • 过滤器:对请求在进入后Servlet之前或之后进行处理。

  • 拦截器:对请求在handler【Controller】前后进行处理。

过滤器和拦截器的区别有哪些

四、执行顺序不同

同时配置了过滤器和拦截器的情形:

MyFilter1 前 MyFilter2 前 MyInterceptor1 在Controller前执行 MyInterceptor2 在Controller前执行 controller方法执行... MyInterceptor2 Controller之后,视图渲染之前 MyInterceptor1 Controller之后,视图渲染之前 MyInterceptor2 视图渲染完成之后执行 MyInterceptor1 视图渲染完成之后执行 MyFilter2 后 MyFilter1 后

过滤器的顺序

每一次都将chain对象传入,达到最后接口回调的效果:

过滤器和拦截器的区别有哪些

拦截器的顺序

preHandle1 -> preHande2 -> 【Controller】 -> postHandle2 ->  postHandle1 -> afterCompletion2 ->  afterComplention1preHandle按照注册顺序,后两个与注册顺序相反。

  • 一个拦截器的preHandle为false,则之后的所有拦截器都不会执行。

  • 一个拦截器的preHandle为true,则这个拦截器的triggerAfterCompletion一定会执行。

  • 只有所有的拦截器preHandler都为true,也就是正常执行,postHandle才会执行。

boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {     HandlerInterceptor[] interceptors = getInterceptors();    if (!ObjectUtils.isEmpty(interceptors)) {         for (int i = 0; i < interceptors.length; i++) {             HandlerInterceptor interceptor = interceptors[i];            //一旦当前拦截器preHandle的返回值为false,那么从上一个可用的拦截器的afterCompletion开始             if (!interceptor.preHandle(request, response, this.handler)) {                 triggerAfterCompletion(request, response, null);                 return false; //这里返回false意为 后续不进行下去了。             }            this.interceptorIndex = i;//interceptorIndex初始化为-1,只有当前拦截器preHandle为true,才会赋值当前的i。         }    }    return true; }void applyPostHandle(HttpServletRequest request, HttpServletResponse response, @Nullable ModelAndView mv)    throws Exception {    HandlerInterceptor[] interceptors = getInterceptors();    if (!ObjectUtils.isEmpty(interceptors)) {         for (int i = interceptors.length - 1; i >= 0; i--) {             HandlerInterceptor interceptor = interceptors[i];            interceptor.postHandle(request, response, this.handler, mv);         }    }}void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, @Nullable Exception ex)    throws Exception {    HandlerInterceptor[] interceptors = getInterceptors();        for (int i = this.interceptorIndex; i >= 0; i--)  }

五、控制执行顺序方式不同

两者默认都是使用注册顺序,如果想要认为控制执行的顺序,方式略有不同:

  • 过滤器如果想要强制改变,可以使用@Order注解。

  • 拦截器如果使用order()方法

@Order(2) @Component public class MyFilter1 implements Filter {}  @Component public class WebAdapter implements WebMvcConfigurer {     @Autowired     MyInterceptor1 myInterceptor1;    @Autowired     MyInterceptor2 myInterceptor2;    @Override     public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(myInterceptor1).addPathPatterns("/**").order(2);         registry.addInterceptor(myInterceptor2).addPathPatterns("/**").order(1);     }}

感谢各位的阅读,以上就是“过滤器和拦截器的区别有哪些”的内容了,经过本文的学习后,相信大家对过滤器和拦截器的区别有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

过滤器和拦截器的区别有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java 拦截器与过滤器的区别究竟有哪些?(java拦截器和过滤器的区别有哪些)

在Java开发中,拦截器(Interceptor)和过滤器(Filter)是两个常用的概念,它们都可以用于在请求处理的不同阶段进行拦截和处理,但在实现方式、使用场景等方面存在一些区别。一、实现方式
Java 拦截器与过滤器的区别究竟有哪些?(java拦截器和过滤器的区别有哪些)
Java2024-12-13

Java拦截器和过滤器的区别有哪些

小编给大家分享一下Java拦截器和过滤器的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、过滤器(filter)过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求
2023-06-15

java拦截器和过滤器有哪些区别

Java拦截器和过滤器有以下区别:1. 执行顺序:过滤器在Servlet容器内部执行,而拦截器在Java代码中执行。过滤器是在请求被发送到Servlet之前或响应被发送到客户端之前执行,而拦截器是在方法调用之前或之后执行。2. 范围:过滤器
2023-10-08

java拦截器和过滤器有什么区别

Java拦截器和过滤器都是用于处理请求和响应的中间件,但它们在功能和使用方面有一些区别。功能:拦截器主要用于处理方法级别的拦截和处理,可以拦截请求的方法调用和响应的结果。过滤器主要用于处理请求和响应的内容,可以对请求和响应的数据进行修改、过
2023-10-24

Spring拦截器和过滤器有什么区别

今天就跟大家聊聊有关Spring拦截器和过滤器有什么区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、概述拦截器和过滤器filter和拦截器的功能都是拦截,filter拦截的目标
2023-06-15

Java中拦截器和过滤器有什么区别

这篇文章将为大家详细讲解有关Java中拦截器和过滤器有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、过滤器(filter)过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,
2023-06-15

java中过滤器和拦截器有什么区别

在Java中,过滤器(Filter)和拦截器(Interceptor)都是用于处理Web请求的组件,但它们有以下区别:1. 功能不同:过滤器主要用于在请求被发送到Servlet或JSP之前预处理请求和响应,例如验证用户身份、编码转换、日志记
2023-08-26

过滤器和拦截器的区别是什么

本篇内容介绍了“过滤器和拦截器的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们在项目中同时配置 拦截器 和 过滤器。过滤器的配
2023-06-02

面试官:过滤器和拦截器有什么区别?

过滤器和拦截器都是基于 AOP 思想实现的,用来处理某个统一的功能的,但二者又有 5 点不同:出身不同、触发时机不同、实现不同、支持的项目类型不同以及使用的场景不同。过滤器通常是用来进行全局过滤的,而拦截器是用来实现某项业务拦截的。

Java中的过滤器和拦截器有什么区别么?

我们自定义一个获取并返回某个静态资源的内容以及整个请求所花费的时间拦截器,一般这个还是比较有用的,而且还可以加一个请求访问的,然后来处理方法执行时间的。

过滤器Filter和拦截器Interceptor的联系和区别

本文将对拦截器Interceptor进行简单讲解,并通过几个例子对它们的差异进行简要分析。

java过滤器和拦截器有哪些异同点

这篇“java过滤器和拦截器有哪些异同点”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java过滤器和拦截器有哪些异同点”文
2023-06-27

Java拦截器,过滤器,监听器的简单原理和区别

在Java Web开发中,拦截器(Interceptor)、过滤器(Filter)和监听器(Listener)都是为了实现业务的预处理或后处理。拦截器主要用于在处理Controller方法前后添加特定的处理逻辑;过滤器对请求和响应进行预处理和后处理;监听器用于监听和响应Web应用的某些事件。
Java拦截器,过滤器,监听器的简单原理和区别
2023-10-29

SpringBoot面试突击之过滤器和拦截器区别详解

过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,但二者有着明显的差距,接下来我们一起来看
2022-11-13

编程热搜

目录