联系我们|网站地图 欢迎光临华体会体育官方网页!

华体会体育安卓版app下载电话联系

华体会体育安卓版app下载全国统一定制热线: 010-56125794
华体会体育安卓版app下载

咨询热线

010-56125794

产品中心

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

发布时间:2022-09-07 05:34:47 来源:华体会体育安卓版app下载 作者:华体会体育官方版首页

内容简介:  本文将对Interceptor进行简单讲解,并通过几个例子对它们的差异进行简要分析。  一个应用中可以定义多个,spring在项目启动时,会将这些注册进来,并按照默认规则进行排序。如果是自定义的,可手动设置调用的先后顺序。  各是链式调用,一个请求可以触发多个,每个的调用会按照它加载到spring中的顺序依次执行。  过滤器和都可以实现例如编码设置、日志记录、权限控制等功能,但是二者还是有很多区别的。  每个自定义过滤器都会实现一个doFilter()方法,这个方法有一个关键参数FilterChain。它是一个回调接口,Appli...
全国热线

010-56125794

产品简介 / Introduction

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

  一个应用中可以定义多个,spring在项目启动时,会将这些注册进来,并按照默认规则进行排序。如果是自定义的,可手动设置调用的先后顺序。

  各是链式调用,一个请求可以触发多个,每个的调用会按照它加载到spring中的顺序依次执行。

  过滤器和都可以实现例如编码设置、日志记录、权限控制等功能,但是二者还是有很多区别的。

  每个自定义过滤器都会实现一个doFilter()方法,这个方法有一个关键参数FilterChain。它是一个回调接口,ApplicationFilterChain是它的具体实现类,该类内部也有一个doFilter()方法,这个方法就是回调方法(ps:可以理解为方法递归调用,查看源码比较容易理解)。

  为什么说是基于反射实现的呢?个人理解在内部的三个方法中,都有一个共同的参数handler,这个参数里包含的信息比较丰富。包含该请求所对应的方法、方法所在的Controller、方法参数等信息,而这些信息都是spring通过反射加载进来的。正是由于这些丰富的参数,使得拦截的功能相比过滤器功能更强大。

  过滤器Filter实现了javax.servlet.Filter接口,也就是说过滤器的使用要依赖于Tomcat等容器,所以它只能在web程序中使用。

  过滤器Filter是在请求进入Tomcat等容器后,servlet处理之前进行调用的。

  在实际开发中,当使用到过滤器或时,难免会引入一些依赖的service服务。下面就通过例子进行简要说明:

  Interceptor依赖service:直接采用注解@Autowired,但是在将注入到spring容器中时,不能自己通过new来进行创建。需要将当做一个普通的bean注入到spring容器中,这样就可以将service注入到中。

  (1)Filter:需要通过配置类指定加载顺序,值越小,越先执行。采用@WebFilter无法指定顺序。

  (2)Interceptor:需要通过配置类指定加载顺序,值越小,越先执行。

  二者相比功能更强大些,Filter能做的事情,它都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要用来设置字符编码、过滤敏感词汇和URL级别的简单权限控制。如果需要记录比较详细的信息或比较复杂的权限管理,还是建议用实现。

北京华体会体育官方网页版权所有
点击在线咨询
二维码

扫描二维码微信联系
24小时免费技术咨询