此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

闪光属性

Flash 属性为一个请求提供了一种存储用于 另一个。重定向时最常需要这样做,例如 Post-Redirect-Get 模式。Flash 属性在 重定向(通常在会话中)在 重定向并立即删除。spring-doc.cadn.net.cn

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

Flash 属性支持始终处于“打开”状态,无需显式启用。 但是,如果不使用,则永远不会导致 HTTP 会话创建。在每个请求中,都有一个 “输入”FlashMap,从上一个请求(如果有)传递的属性和 “输出”FlashMap,以保存以供后续请求使用。双FlashMap实例可以通过RequestContextUtils.spring-doc.cadn.net.cn

带注释的控制器通常不需要使用FlashMap径直。相反,一个@RequestMapping方法可以接受类型为RedirectAttributes并使用它 为重定向方案添加 Flash 属性。通过添加的 Flash 属性RedirectAttributes自动传播到“输出”FlashMap。同样地 重定向后,来自“输入”的属性FlashMap会自动添加到Model提供目标 URL 的控制器。spring-doc.cadn.net.cn

将请求与闪存属性匹配

flash 属性的概念存在于许多其他 Web 框架中,并且有时已被证明 面临并发问题。这是因为,根据定义,闪存属性 将存储到下一个请求。但是,“下一个”请求可能不是 预期接收者,但另一个异步请求(例如,轮询或资源请求), 在这种情况下,闪存属性被删除得太早。spring-doc.cadn.net.cn

为了减少此类问题的可能性,RedirectView自动“盖章”FlashMap实例,其中包含目标重定向 URL 的路径和查询参数。在 turn,默认值FlashMapManager在以下情况下将该信息与传入请求进行匹配 它查找“输入”FlashMap.spring-doc.cadn.net.cn

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