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

为什么在Spring使用OncePerRequestFilter?

徐帅
2023-03-14

正如文件所说:

过滤器基类,其目的是保证在任何servlet容器上每次请求分派都执行一次。

有一个问题什么是OncePerrecestFilter?我仍然不知道我们为什么要使用它。

它说“在任何servlet容器上”。这意味着有servlet容器将多次执行过滤器?

共有3个答案

裴鸿熙
2023-03-14

的javadoc为OncePerrecestFilter状态

从Servlet3.0开始,过滤器可以作为javax的一部分调用。servlet。DispatcherType请求或javax。servlet。DispatcherType在单独线程中发生的异步调度。可以在web中配置筛选器。xml是否应该参与异步调度。但是,在某些情况下,servlet容器采用不同的默认配置。因此,子类可以重写shouldNotFilterAsyncDispatch()方法,以静态声明是否应该在两种类型的调度期间调用它们一次,以便提供线程初始化、日志记录、安全性等。这种机制补充而不是取代在web中配置过滤器的需要。具有分派器类型的xml。

因此,这是在Spring中实现的一个额外的“安全”功能,以确保无论环境如何,事情都是一样的。如果你看看扩展它的类,你会注意到有很多;包括CorsFilter。不确定是否有Spring过滤器没有扩展它,可能没有。

胥智
2023-03-14

一个用例是编写您自己的自定义过滤器,它扩展了OncePerRequestFilter。

这确保了当请求到达时,您的自定义筛选器处于最前线,并且规范确保它被执行。

希望有帮助。

孔嘉茂
2023-03-14

我在这里也回答了。要了解OncePerRequestFilter的作用,我们首先需要清楚地了解普通筛选器的行为。当您希望在servlet执行之前或之后执行某些特定代码时,可以创建一个过滤器,其作用如下:

code1   ===>   servlet execution (using chain.doFilter())   ===>    code2

所以code1在servlet之前执行,code2在servlet执行之后执行。但是在这里,当servlet执行时,可能会有一些对不同servlet的其他请求,并且不同servlet也具有相同的过滤器。在这种情况下,这个过滤器将再次执行。

OncePerRequestFilter阻止此行为。对于我们的一个请求,这个过滤器将只执行一次(不多不少)。使用安全身份验证时,此行为非常有用。

 类似资料:
  • 问题内容: 这里有人使用Spring Android吗?如果是这样,您为什么认为值得? 谢谢 问题答案: 如果您需要从Android应用程序访问RESTful Web服务,则Spring Android非常有用。这在实时数据应用程序中很常见,例如新闻和天气行情,股票行情等。 目前,使用Spring Android项目有两个好处:Commons logging和RestTemplate。 http:

  • 问题内容: 我知道这个问题有点悬而未决,但是我一直在将Scala / Lift视为Java / Spring的替代方案,我想知道Scala / Lift在此之上的真正优势是什么。从我的观点和经验来看,Java Annotations和Spring确实最小化了您为应用程序要做的编码量。Scala / Lift是否会对此有所改善? 问题答案: 假设我们对Scala和Java同样满意,并忽略(巨大的)语

  • 问题内容: 问候语,当前正在开发小型Web服务应用程序,其中来自Web服务(使用CXF + Spring)的响应已处理并保存到数据库中。为了使用数据库,我正在使用Hibernate(3.5)。在网络上浏览一些Hibernate + Spring示例,我经常可以看到HibernateTemplate的用法,因此我对此感到有些困惑,想问一下: 您是否在Hibernate3应用程序中使用Hibernat

  • 本文向大家介绍为什么要用 spring boot?相关面试题,主要包含被问及为什么要用 spring boot?时的应答技巧和注意事项,需要的朋友参考一下 配置简单 独立运行 自动装配 无代码生成和 xml 配置 提供应用监控 易上手 提升开发效率

  • 我想在spring boot项目中使用“truncate table”语句而不是“delete”语句,因为我需要重置mysql中的自动增量id。这是我的代码: 但有一个例外,就像这样: 其他操作已经工作,如插入、更新或选择,原因是什么,我应该修改什么?

  • 问题内容: 问候语,当前正在开发小型Web服务应用程序,其中来自Web服务(使用CXF + Spring)的响应已处理并保存到数据库中。为了使用数据库,我正在使用Hibernate(3.5)。在网络上浏览一些Hibernate + Spring示例,我经常可以看到HibernateTemplate的用法,因此我对此感到有些困惑,想问一下: 您是否在Hibernate3应用程序中使用Hibernat