编程语言
首页 > 编程语言> > spring – 在集群环境中部署应用程序时,FlashAttributes无法正常工作

spring – 在集群环境中部署应用程序时,FlashAttributes无法正常工作

作者:互联网

我正在使用redirectAttributes将成功或失败消息传递给重定向的URL.这样我只能在重定向页面上显示成功或失败消息一次.如果再次刷新同一页面,则该消息将不会再次出现.这是正常的,并且在tomcat上正常部署时工作正常.

现在我们已经设置了一个集群环境,我们已经部署了Web应用程序.但在这种情况下,redirectAttributes工作得很奇怪.有时它有效,有时不行.

以下是我用于将flashAttribute添加到重定向属性的代码行.

redirectAttributes.addFlashAttribute("successMsg", message);

我使用Spring 3.1.0.RELEASE版本和Tomcat 7用于集群环境.

我想知道这个问题是否有任何解决方法.是否有更新的Spring版本支持在集群环境中使用redirectAttributes?
如果还有其他方法可以执行此类操作,您也可以告诉我.

提前致谢.

解决方法:

听起来您的客户端的HTTP会话可能无法在Tomcat服务器之间共享.由于Spring Flash属性为stored in the session,因此您可能会遇到以下情况:

>初始请求转到serverA,并在serverA上的会话中设置flash属性
>发生重定向,请求发送到serverB. serverA和serverB为用户提供不同的HTTP会话(假设您没有共享它们的机制),因此serverB没有看到flash属性(它有自己独立的HTTP会话)

如果发送客户端请求的服务器是非确定性的,则可能会间歇性地遇到此问题.例如,如果上述两个请求碰巧都发送到serverA,那么flash属性将正常工作,因为会话将是相同的.

如果是这种情况,那么您需要一种机制来:

>提供“粘性”会话 – 保证给定客户端的所有请求都路由到同一个Tomcat服务器.通常这是通过负载均衡器/路由机制完成的(例如:nginx ip hash routing)
>实施session replication – 使所有Tomcat服务器共享会话,这样无论哪个Tomcat服务于客户端请求,HTTP会话都是相同的.

标签:spring,spring-3
来源: https://codeday.me/bug/20190725/1537359.html