Flash 属性

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径直。相反,一个@RequestMappingmethod 可以接受RedirectAttributes并使用它 为重定向方案添加 Flash 属性。通过RedirectAttributes会自动传播到“输出”FlashMap。同样地 重定向后,来自 “input” 的属性FlashMap会自动添加到Model提供目标 URL 的控制器。spring-doc.cadn.net.cn

将请求与 flash 属性匹配

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

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

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