请求先经过filter后经过HandlerInterceptor,为什么说HandlerInterceptor优先级更高?
时间: 2023-11-03 19:30:15 浏览: 35
因为HandlerInterceptor是在Controller方法执行前后进行拦截的,可以对请求进行更加细粒度的控制和处理,而filter是在请求进入Servlet容器前进行拦截的,只能对请求进行基本的处理,无法对Controller方法的执行结果进行更加精细的处理。因此,HandlerInterceptor的优先级更高。
相关问题
Filter和HandlerInterceptor的区别和优势?
`Filter`和`HandlerInterceptor`都是用于拦截请求并处理的技术,它们的作用类似,但在实现上有一些区别和优势。
**区别:**
1. `Filter`是基于`Servlet`规范实现的,而`HandlerInterceptor`是基于`Spring MVC`框架实现的。
2. `Filter`依赖于`Servlet`容器,因此在过滤器链中的所有过滤器都会被执行,而`HandlerInterceptor`只会在`Spring MVC`的请求处理链中执行。
3. `Filter`的生命周期由`Servlet`容器管理,而`HandlerInterceptor`的生命周期由`Spring MVC`框架管理。
4. `Filter`可以拦截所有类型的请求,包括静态资源请求,而`HandlerInterceptor`只能拦截`Controller`中定义的请求。
**优势:**
1. `Filter`可以拦截所有类型的请求,因此可以对所有资源进行过滤和处理,比如:字符编码、防止XSS攻击等操作。
2. `HandlerInterceptor`只拦截`Controller`中定义的请求,因此可以对请求进行更加细粒度的控制,比如:用户认证、权限控制等操作。
3. `HandlerInterceptor`可以访问`Spring MVC`中的一些核心对象,比如:`HandlerMethod`、`ModelAndView`等对象,可以方便地对请求进行处理和修改。
4. `Filter`可以在`web.xml`中配置,因此可以更加灵活地进行配置和管理。
综上所述,`Filter`和`HandlerInterceptor`都是用于拦截请求并处理的技术,它们的作用类似,但在实现上有一些区别和优势。在实际应用中,可以根据具体的需求和场景选择合适的技术。
Spring MVC 的 HandlerInterceptor 底层基于什么实现?
Spring MVC 的 HandlerInterceptor 底层基于 Servlet 的拦截器实现。在 Servlet 中,可以通过 Filter 对 HTTP 请求进行拦截和处理,在 Spring MVC 中,HandlerInterceptor 就是基于此实现的。当一个请求到达 DispatcherServlet 时,它会按照配置的拦截器链进行处理,每个拦截器都可以对请求进行处理,也可以将请求传递给下一个拦截器或请求处理器。因此,HandlerInterceptor 可以方便地与其他 Servlet API 和框架集成,例如 Struts、JSF 等。同时,Spring MVC 还提供了基于 AOP 的拦截器实现,可以通过配置 Advisor 和 Pointcut 来实现对请求的拦截和处理。