区别
1. 拦截器基于java的反射机制,过滤器基于函数回调。
2. 拦截器不依赖servlet容器,过滤器依赖servlet容器。
3. 拦截器只能对action请求起作用,过滤器对几乎所有请求起作用。
4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
6. 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,在拦截器里注入一个service,可以调用业务逻辑
。
使用场景
1. 过滤器
依赖框架:过滤器是基于Servlet规范实现的,不依赖任何特定的框架。
主要用于:对请求进行预处理和过滤,例如设置字符集、登录验证、日志记录
等操作。
2. 拦截器
依赖框架:拦截器通常是针对特定的框架或库实现的,例如Spring MVC框架中的拦截器。
主要用于:对请求进行流程控制,例如权限验证、参数注入、异常处理
等操作。