此版本仍在开发中,尚未稳定。如需最新的稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

Flash属性

闪存属性提供了一种方式,使得一个请求可以存储打算在另一个请求中使用的属性。这通常在重定向时需要——例如,在Post-Redirect-Get模式中。闪存属性在重定向之前临时保存(通常在会话中),以便在重定向后的请求中使用,并且会立即移除。spring-doc.cadn.net.cn

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

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

注解控制器通常不需要直接与 FlashMap 交互。相反,一个 @RequestMapping 方法可以接受一个类型为 RedirectAttributes 的参数,并使用它来为重定向场景添加闪存属性。通过 RedirectAttributes 添加的闪存属性会自动传播到“输出”FlashMap。类似地,在重定向之后,“输入”FlashMap 中的属性会自动添加到目标 URL 所服务的控制器的 Model 中。spring-doc.cadn.net.cn

将请求与闪存属性匹配

闪存属性的概念在许多其他Web框架中都存在,并且有时被证明会暴露出并发问题。这是因为,按定义,闪存属性需要存储到下一个请求。然而,这个“下一个”请求可能并不是预期的接收者,而是另一个异步请求(例如,轮询或资源请求),在这种情况下,闪存属性会被过早删除。spring-doc.cadn.net.cn

为了减少此类问题的可能性,RedirectView 会自动在 FlashMap 实例上“盖章”目标重定向URL的路径和查询参数。反过来,默认的 FlashMapManager 在查找“输入”FlashMap 时会匹配这些信息到传入的请求。spring-doc.cadn.net.cn

这并不能完全消除并发问题的可能性,但通过重定向URL中已有的信息大大减少了这种可能性。因此,我们建议您主要在重定向场景中使用闪现属性。spring-doc.cadn.net.cn