在 Spring Boot 中,拦截器和过滤器都是用于在请求处理过程中执行某些操作的组件。都能决定请求是否中断执行。尽管过滤器已经存在并可以满足许多需求,但 Spring Boot 为什么还引入了拦截器呢?下面是一些可能的原因:
与 Spring MVC 紧密集成:
拦截器是 Spring MVC 框架的一部分,它与控制器紧密集成,并且可以直接访问 Spring MVC 的处理器、模型和视图等组件。这使得拦截器能够更轻松地与 Spring MVC 的其他功能(如注解驱动的控制器、视图解析器等)进行集成,实现更灵活的请求处理和功能扩展。
更精细的控制:
过滤器是在请求进入 Servlet 容器之前和离开 Servlet 容器之后进行拦截,无法获取控制器信息。而拦截器在请求的处理过程中位于控制器(Controller)前后,可以很容易获取控制器信息。拦截器可以针对具体的请求路径或处理器进行配置,并且可以指定执行顺序。这使得开发人员能够更细粒度地控制请求处理流程,选择性地应用不同的拦截器,并指定它们的执行顺序,以满足不同的业务需求。
更方便的方法注入:
拦截器是基于 Spring IoC 容器的,因此可以使用依赖注入(DI)来方便地注入其他组件或服务。这样,拦截器可以更方便地访问和使用其他 Spring 管理的 bean,提供更强大的功能扩展能力。
更高级的功能:
拦截器在设计上更加灵活,可以执行更高级的功能,如权限验证、事务管理、日志记录、性能监控等。拦截器可以直接访问 Spring MVC 的上下文和组件,以及其他业务逻辑,因此在实现一些复杂的功能时具有更大的灵活性和可扩展性。
本文暂时没有评论,来添加一个吧(●'◡'●)