对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

Flash Attributes

Flash 属性提供了一种机制,允许一个请求存储供另一个请求使用的属性。这在重定向时最为常见——例如 Post-Redirect-Get 模式。Flash 属性在重定向之前会临时保存(通常保存在会话中),以便在重定向后的请求中使用,并在使用后立即被移除。spring-doc.cadn.net.cn

Spring MVC 提供了两个主要的抽象来支持 flash 属性。FlashMap 用于保存 flash 属性,而 FlashMapManager 用于存储、检索和管理 FlashMap 实例。spring-doc.cadn.net.cn

Flash 属性支持始终处于“开启”状态,无需显式启用。 然而,如果不使用它,则永远不会导致创建 HTTP 会话。在每个请求中,都会有一个“输入”FlashMap,其中包含从前一个请求传递过来的属性(如果有的话),以及一个“输出”FlashMap,用于保存供后续请求使用的属性。这两个 FlashMap 实例均可通过 Spring MVC 中任意位置调用 RequestContextUtils 中的静态方法来访问。spring-doc.cadn.net.cn

带注解的控制器通常无需直接操作 FlashMap。相反,@RequestMapping 方法可以接受一个类型为 RedirectAttributes 的参数,并使用它在重定向场景中添加 flash 属性。通过 RedirectAttributes 添加的 flash 属性会自动传递到“输出”FlashMap 中。同样地,在重定向之后,“输入”FlashMap 中的属性也会自动添加到处理目标 URL 的控制器的 Model 中。spring-doc.cadn.net.cn

将请求与闪存属性(flash attributes)进行匹配

“闪存属性”(flash attributes)的概念存在于许多其他 Web 框架中,但有时被证明会引发并发问题。这是因为,根据定义,闪存属性应保存到下一次请求为止。然而,这个所谓的“下一次”请求可能并非预期的接收者,而可能是另一个异步请求(例如轮询请求或资源请求),在这种情况下,闪存属性就会被过早地移除。spring-doc.cadn.net.cn

为了降低此类问题发生的可能性,RedirectView 会自动使用目标重定向 URL 的路径和查询参数对 FlashMap 实例进行“标记”。相应地,当默认的 FlashMapManager 查找“输入”FlashMap 时,会将该信息与传入的请求进行匹配。spring-doc.cadn.net.cn

这并不能完全消除并发问题的可能性,但可以利用重定向 URL 中已有的信息大大降低其发生概率。 因此,我们建议您主要在重定向场景中使用闪存属性(flash attributes)。spring-doc.cadn.net.cn