什么是过滤器(Filter)和拦截器(Interceptor)
过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,但二者有着明显的差距。
出生不同:
- 过滤器来源于Servlet
- 拦截器来源于Spring框架
使用范围不同:
- 过滤器依赖于tomcat等容器,只能使用于web程序
- 拦截器可用于web程序,也可用与非web程序(Application、Swing)
实现原理不同:
- 过滤器基于ApplicationFilterChain实现
- 拦截器基于动态代理(反射)实现
使用场景不同:
- 过滤器通常是用来实现通用功能过滤的,比如:敏感词过滤、字符集编码设置、响应数据压缩等功能
- 拦截器更接近业务系统,所以拦截器主要用来实现项目中的业务判断的,比如:登录判断、权限判断、日志记录等业务。