# 13Interceptor与Filter的区别

Interceptor与Filter两者的功能很相似,都可以对url请求过滤,两者的区别是什么呢?

# 导航

回到Spring MVC导航页

# Interceptor

主要作用:对URL请求进行前置/后置过滤
通过实现Spring的HandlerInterceptor接口,其中preHandler()方法在调用Handler之前进行拦截,postHandler()方法在视图渲染之前调用,afterCompletion()方法在返回响应之前执行;

# filter

filter在请求进入Servlet容器执行service()方法之前就会经过Filter过滤,不像Interceptor一样依赖于spring MVC框架,只需要依赖于servlet.Filter启动是随着WEB应用的启动而启动,只需要初始化一次,以后都可以进行拦截。
Filter有如下几个种类:
用户授权Filter:检查用户请求,根据请求过滤用户非法请求;
日志Filter:记录某些特殊的用户请求
解码Filter: 对非标准编码的请求编码。 Filter可以拦截多个请求和响应,一个请求和响应也可以被多个Filter拦截

# Filter和Interceptor的区别

  1. Filter接口在javax.Servlet包下面。Interceptor定义在org.Springframework.web.Servlet中
  2. Filter基于Filter接口中的doFilter回调函数,是Servlet容器支持的;而Interceptor则基于Java本身的反射机制(AOP思想),是spring框架支持的
  3. Filter是基于Servlet容器的,没有Servlet容器就无法回调doFilter方法,而Interceptor与Servlet无关;
  4. Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面、图片、文件等,而Interceptor只能过滤请求,只对请求起作用,在请求之前开始,在请求完后结束(如被拦截,不执行请求)
  5. Filter的过滤一般在加载的时候在init()方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求,来辨别是否过滤。
  6. Interceptor可以访问请求上下文、值栈里的对象,而Filter不能
  7. 在请求的生命周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次。
Filter interceptor
多个的执行顺序 根据filter mapping的配置先后顺序 安装配置的顺序,但是可以通过order控制顺序
规范 在Servlet规范中定义的,是Servlet容器支持的 Spring容器内的,是Spring框架支持的
使用范围 只能用于web程序中 既可以用于web程序,也可以用于Application、Swing程序中
深度 Filter只在Servlet中起作用 拦截器能够深入到方法前后、异常抛出前后等

# 导航,上一页,下一页

12-springMvc拦截器
14开发用户流量拦截器

# 支持我-微信扫一扫-加入微信公众号

Aseven公众号

# 赞赏作者

赞赏作者

# 种一棵树,最好的时间是十年前,其次是现在

立志用功,如种树然。方其根芽,犹未有干;及其有干,尚未有枝;枝而后叶,叶而后花、实。初种根时,只管栽培灌溉,勿作枝想,勿作实想。悬想何益?何不忘栽培之功,怕没有枝叶花实?