过滤器(Filter)和拦截器(Interceptor)在JavaWeb开发用于拦截和处理请求的机制,但有显著的区别和不同的业务场景。
概念:
过滤器(Filter)是基于servlet容器回调实现,可以拦截请求和响应的所有内容,包括静态资源和动态资源。
拦截器(Interceptor)是基于Spring框架,只作用于Spring的上下文中。拦截器只能拦截请求到Controller之前,或响应返回视图之前的操作。
区别:
实现方式:
过滤器是基于Servlet规范的Filter接口实现。过滤器在Servlet容器中配置,并由容器管理其生命周期。
拦截器是基于Spring的HandlerInterceptor接口实现。拦截器Spring的配置文件过注解定义,并由SpringIOC容器管理其生命周期。
触发时机:
过滤器是在Servlet执行前后进行处理的。可以拦截所有进入Servlet容器的请求,包括静态资源(如HTML、CSS、JS文件)和动态资源(如Servlet、JSP)。
拦截器是在MVC的请求处理。到达Controller之前或返回视图之前进行拦截的,无法拦截静态资源的请求。
应用场景:
过滤器主要用于过滤请求和响应。如:字符编码处理、安全控制、日志记录。
拦截器可以进行更为复杂的业务逻辑处理。如:权限控制、日志记录、性能监控、事务控制。
执行机制:
过滤器由Servlet容器回调完成。过滤器链在请求到达Servlet之前和响应离开Servlet之后一次执行。
拦截器通过Spring的动态代理(反射)实现。拦截器链在请求到达Controller之前和视图渲染之前依次执行。
生命周期:
过滤器在Servlet容器管理,随Servlet容器的启动和关闭而创建与销毁。过滤器链在web.xml文件中配置,也可以通过注解配置。
拦截器是SpringIOC容器管理,随Spring应用上下文的创建和销毁而创建和销毁。可以在Spring的配置文件中配置,也可以注解配置。
标签:容器,拦截器,请求,Spring,Filter,过滤器,Interceptor,Servlet From: https://www.cnblogs.com/warmNest-llb/p/18242661