mac校验错误 java_java – JSF“错误Mac没有验证!”

参见英文答案 >

Getting ViewExpiredException in clustered environment while state saving method is set to client and user session is valid                                    2个

我一直在尝试使用jsf中的primefaces实现一些基本的推送功能.我在那里使用了计数器示例

http://www.primefaces.org/showcase-labs/push/counter.jsf.基本上它是一个增加共享计数器的按钮.运行此示例时,我总是收到此错误:

ERROR: MAC did not verify!

我的理解是每个会话都会生成一个mac,然后检查每个传入的消息,以验证源没有改变(我认为).我一直无法找到原因并查看了其他主题,例如:

不幸的是,这些并没有解决我的问题两者似乎都是由我没有得到的ViewExpiredException引起的.我发现阻止它的唯一方法是在web.xml中将状态保存方法从客户端更改为服务器:

javax.faces.STATE_SAVING_METHOD

client

但是,当这样做时,计数器不再共享,但似乎是每个用户,这不是我想要的.我的最终目标是实现一个聊天室,其中大部分都在那里,但现在它使用的短轮询不是很容易扩展.看过primefaces推后我认为这将是理想的,但一直在努力使用它.

我尝试过多个Web服务器(Tomcat,Jetty和Glassfish),并尝试使用不同版本的JSF(Mojarra)和primefaces版本(3.4和4.0).我已在多个浏览器和多台计算机上测试过它.有时我会在收到错误之前将计数器增加几次,有时它会立即发生.我没有例外或严重的错误,一切都编译.我还想提一下,我之前在其他项目上遇到过这个错误,但是在重新启动服务器后它已经消失了.当使用primefaces时,它总会发生.任何帮助将不胜感激.

编辑

在web.xml中将状态保存保留到服务器以避免MAC错误时,我注意到共享计数器在同一台计算机上以每个浏览器为基础工作.这意味着如果我有多个选项卡或窗口,则在所有选项卡的一个更新中更新计数器.但它不能跨浏览器工作,firefox中的计数器更改不会反映在chrome或IE中,或其他方式.如果在两台独立的计算机上也没有反映出来.我不知道这是否有帮助,但我想我会提到它.

编辑

在注意到示例中的bean是会话作用域后,我将其更改为应用程序作用域.当然,会话作用域意味着每个浏览器都有自己的副本.现在,更改将反映在浏览器和计算机上.回到我原来的问题,我仍然想知道为什么将保存状态更改为服务器修复了MAC错误,这是什么意思?我假设服务器现在必须维护每个会话的视图状态而不是客户端,可伸缩性更低/客户端 – 服务器流量更多?从我所看到的,如果你将保存状态设置为服务器,你无法检查查看过期的异常或阻止用户创建视图(如果它们已经有太多,这是正确的吗?)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值