【发布时间】:2014-12-22 21:53:09
【问题描述】:
我有一个问题,每次我重新部署我的应用程序时,任何现有会话都会中断,并且请求会导致 ViewExpiredException。相关问题或外部邮件列表/论坛帖子中的建议似乎都无法解决此问题。我可以完全不改变地重新部署相同的 WAR 文件,并且行为是相同的。
我正在使用 Apache MyFaces 2.2.0、Tomcat 7.0.56 和 Primefaces 5.0。
异常的消息是No saved view state could be found for the view identifier:,其中包含将请求的任何页面。 Primefaces 的menubar 用于导航,它似乎被实现为带有POST 请求的<form>。这些消息同时出现在那些导航选项和使用 POST 的其他 AJAX 中。
我试过了:
- 设置显式
org.apache.myfaces.SECRET和org.apache.myfaces.MAC_SECRET值,如in this document 所示。 -
javax.faces.STATE_SAVING_METHOD参数的client和server值。 - 确保所有 bean 及其传递字段都是可序列化的。日志中未报告序列化错误。
- 使用过滤器添加无缓存标头,例如正如this answer 中所建议的那样。
- 会话持久性未被禁用,即我的
context.xml已将<Manager pathname="" />注释掉。
【问题讨论】:
-
你设置了 org.apache.myfaces.MAC_SECRET 参数了吗?存储在视图状态中的信息既加密又被篡改,每次重新启动应用程序时都会为两者生成一个新密钥。见Security configuration for Myfaces Core
-
试过了,没用。我编辑了问题以反映这一点并提供更多信息。
标签: java jsf tomcat primefaces jsf-2.2