当前位置: 首页 > 知识库问答 >
问题:

SpringMVC中拦截器和滤波器的区别

梁建德
2023-03-14

我对过滤器拦截器的用途有点困惑。

正如我从文档中理解的,拦截器在请求之间运行。另一方面,Filter在呈现视图之前运行,但在Controller呈现响应之后运行。

那么,拦截器中的postHandle()和过滤器中的doFilter()之间的区别在哪里呢?

共有3个答案

张建树
2023-03-14

HandlerInterceptor给你比过滤器更细粒度的控制,因为你可以访问实际的目标“处理程序”——这意味着你执行的任何操作都可以根据请求实际在做什么而变化(而servlet过滤器通常应用于所有请求——只能够考虑到每个请求的参数)。处理程序拦截器还提供了3种不同的方法,这样您就可以在处理程序完成后调用处理程序之前但在视图呈现之前(您甚至可以完全绕过视图呈现),或者在视图本身被呈现之后应用行为。此外,您可以为不同的处理程序组设置不同的拦截器——拦截器是在处理程序映射上配置的,并且可能有多个处理程序映射。

因此,如果你需要做一些完全通用的事情(例如记录所有请求),那么过滤器就足够了——但是如果行为取决于目标处理程序,或者你想在请求处理和视图呈现之间做一些事情,那么HandlerInterceptor就提供了这种灵活性。

景帅
2023-03-14

过滤器:-过滤器顾名思义是一个Java类,由servlet容器为每个传入的HTTP请求和每个HTTP响应执行。这种方式可以在HTTP传入请求到达资源之前管理它们,例如JSP页面、servlet或简单的静态页面;同样,也可以在资源执行后管理HTTP出站响应。

拦截器:-Spring拦截器类似于Servlet过滤器,但它们在Spring上下文中工作,因此能够强大地管理HTTP请求和响应,但它们可以实现更复杂的行为,因为它们可以访问所有Spring上下文。

张亦
2023-03-14

从HandlerIntercepter的javadoc:

HandlerInterceptor基本上类似于ServletFilter,但与后者相比,它只允许自定义预处理,可以选择禁止执行处理程序本身,以及自定义后处理。过滤器更强大,例如,它们允许交换传递给链的请求和响应对象。请注意,过滤器是在web中配置的。xml,应用程序上下文中的HandlerInterceptor

作为一项基本指导原则,与细粒度处理程序相关的预处理任务是HandlerInterceptor实现的候选任务,尤其是考虑了常见的处理程序代码和授权检查。另一方面,过滤器非常适合于请求内容和视图内容处理,比如多部分表单和GZIP压缩。这通常显示何时需要将筛选器映射到特定内容类型(例如图像)或所有请求。

话虽如此:

那么拦截器#postHandle()过滤器#doFilter()之间的区别在哪里呢?

postHandle将在调用处理程序方法之后,但在呈现视图之前调用。因此,可以向视图中添加更多模型对象,但不能更改HttpServletResponse,因为它已经提交了。

doFilterpostHandle更通用。您可以更改请求或响应,并将其传递给链,甚至阻止请求处理。

此外,在preHandlepostHandle方法中,您可以访问处理请求的handler方法。因此,可以根据处理程序本身添加预处理/后处理逻辑。例如,可以为具有一些注释的处理程序方法添加逻辑。

在哪些用例中应该使用它的最佳实践是什么?

正如doc所说,与细粒度处理程序相关的预处理任务是HandlerInterceptor实现的候选任务,特别是考虑了常见的处理程序代码和授权检查。另一方面,过滤器非常适合于请求内容和视图内容处理,比如多部分表单和GZIP压缩。这通常显示何时需要将筛选器映射到特定内容类型(例如图像)或所有请求。

 类似资料:
  • 本文向大家介绍浅析JAVA中过滤器、监听器、拦截器的区别,包括了浅析JAVA中过滤器、监听器、拦截器的区别的使用技巧和注意事项,需要的朋友参考一下 1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login

  • 本文向大家介绍详解springmvc拦截器拦截静态资源,包括了详解springmvc拦截器拦截静态资源的使用技巧和注意事项,需要的朋友参考一下 springmvc拦截器interceptors springmvc拦截器能够对请求的资源路径进行拦截,极大的简化了拦截器的书写。但是,千万千万要注意一点:静态资源的放行。 上代码: 问题来了,在请求jsp页面的时候,你的静态资源的访问仍然会被自定义拦截器

  • 主要内容:实现,步骤 1,Filter.java,步骤 2,AuthenticationFilter.java,DebugFilter.java,步骤 3,Target.java,步骤 4,FilterChain.java,步骤 5,FilterManager.java,步骤 6,Client.java,步骤 7,InterceptingFilterDemo.java,步骤 8拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。

  • 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过滤器链(Filter Cha

  • 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过滤器链(Filter Cha