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

闪光属性

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

Spring MVC 有两个主要的抽象来支持 flash 属性。FlashMap使用来保存 Flash 属性,而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

将请求与闪存属性匹配

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

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

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