使用反向代理时jsf查看过期错误

jsf view expired error when using reverse proxy

我正在编写一个 EAI(外部身份验证接口)解决方案,为某些应用程序提供 Login/Logout 页面

我们目前有一个 F5 负载均衡器,它位于两个 WebSEAL 6.1 反向代理之前,然后在 WebSphere Application Server 8.0.0.10

上平衡两个应用程序 运行 之间的请求

登录页面由 JSF 2.0.6 应用程序提供,并使用 客户端 状态保存,因此我们没有会话超时

页面也使用请求范围的 bean 以尽可能接近无状态,因为我不能使用 JSF 2.2 来使用真正的无状态标志

我们发现以下情况存在问题,正在努力提出解决方案

  1. 客户在浏览器中转到登录页面。 WebSEAL 将它们发送到其中一个 WebSphere 服务器
  2. 客户随后提交表单,但 WebSEAL 将新请求发送到不同的 WebSphere 服务器
  3. 客户随后遇到错误,但被重定向到空白登录页面

我们正在使用 OmniFaces FullAjaxExceptionHandler 来捕获在步骤 2 中生成的视图过期错误

我们还可以通过强制 WebSEAL 重定向两个 WebSphere 服务器之间的流量并模拟场景来重现错误

这个问题似乎是因为一个 WebSphere 服务器的视图状态与另一个 WebSphere 服务器不兼容,这是有道理的

出于我们的目的,我们只真正需要提交的表单详细信息才能登录用户,我们这边不需要视图状态

有没有办法使来自一台服务器的客户端视图状态兼容或与另一台服务器一起工作?

如能就此问题提供任何帮助,我们将不胜感激。

我不确定是否可以回答我自己的问题,但我确实找到了适合我们的解决方案。

在这些情况下 damaged/missing,我们使用 OmniFaces enableRestorableView 标签重建视图。

http://showcase.omnifaces.org/taghandlers/enableRestorableView

在我们强制中断和篡改页面视图状态的两个测试用例中,标记允许我们的应用程序使用表单参数继续