【问题标题】:Spring web flow -- Flow gets resetSpring Web 流——流被重置
【发布时间】:2016-10-10 18:22:00
【问题描述】:
我们的流程实际上在较低的开发环境中运行良好,但在测试环境中偶尔会出现故障(5% 的时间)。所以我可以看到代码没有问题。
(测试环境有两个appservers)。顺便说一句,我们正在使用 Websphere 应用服务器
问题是,每当我们尝试浏览流程时,流程会突然重置,并且用户会进入第一页。但是在 firebug 中调试,我们可以看到,只要 JSESSIONID 发生变化,流程就会重置。我们的应用程序有 2 个 WAR。因此,当页面加载时,图像、js、css 在一个中,而 java 控制器在另一个中。那么这是否会导致损坏/修改 JSESSIONID 时出现任何问题。
无法真正弄清楚 cookie 更改的原因。请帮忙。谢谢!
【问题讨论】:
标签:
java
spring
spring-webflow
jsessionid
【解决方案1】:
JSESSIONID cookie 是 servlet 会话 cookie,它不应在一个会话期间更改。
JSESSIONID cookie 是由 servlet 容器在第一次调用 request.getSession() 时创建的,看看这个 answer。
在这种情况下,似乎一些 servlet 请求转到一个 WAR,而其他请求转到另一个,这会导致生成两个不可互换的 JSESSIONID cookie。
一种解决方案是将所有代码部署在同一个 WAR 中,以便只创建一个 JSESSION cookie。
另一种解释是,在测试服务器中配置了一个非常短的会话超时,这会导致会话在用户导航时被重置。
还要检查 web.xml 中的 WAR 和服务器中的 spring 安全配置,以查看测试中会话超时设置是否不同。有时构建过程是特定于环境的并会修改设置。