防止在用户处于当前会话中时调用两倍的相同操作

Prevent same action called twice as long as user is in current session

提问人:user2914906 提问时间:12/6/2013 最后编辑:Roman Cuser2914906 更新时间:3/13/2021 访问量:1324

问:

我正在使用 Struts2 框架,我的问题是

如果用户登录系统并点击某个动作,比如说,流程将进入动作类并执行某个方法,返回相应的结果。 他可能会访问某些网页,然后再次单击。ACTION1ACTION1

只要他处于同一会话中,现在控件就不应该采用该特定方法,但结果应与以前的结果相同。

我们怎样才能做到这一点?

java jsp struts2 双重提交问题

评论

0赞 Roman C 12/6/2013
立即转到相同的方法,但结果可能会有所不同,这取决于操作返回的值。
0赞 user2914906 12/6/2013
我不想再次调用方法...可能吗?
0赞 Roman C 12/6/2013
这取决于您如何控制用户会话?
0赞 user2914906 12/6/2013
嗨,罗曼,感谢您的回复,您能详细告诉我如何操作吗?我是 Struts 的新手
0赞 coding_idiot 12/6/2013
你的意思是缓存响应并阻止操作执行?我不建议对任何操作这样做。虽然静态文件已经被你的浏览器缓存了,但你可以在你的tomcat/apache/ngnix服务器中设置某种程度的动作缓存

答:

1赞 Roman C 12/6/2013 #1

您可以尝试使用 tokenSession 拦截器

此拦截器基于令牌拦截器构建,提供 用于处理无效令牌的高级逻辑。与普通代币不同 拦截器,此拦截器将尝试提供智能 在使用同一会话的多个请求的情况下进行故障转移。 也就是说,它将阻止后续请求,直到第一个请求 完成,然后它不是返回代码,而是 将尝试显示与原始响应相同的响应,有效 如果没有多个请求,则会显示操作调用 首先提交。invalid.token

它将防止重复提交相同的操作或重复使用您提供的带有 s:token 标记的相同令牌。

描述

停止重复提交表单。

令牌标记用于帮助“双击”提交 问题。如果您使用的是 或 .标签仅放置一个隐藏的 元素。TokenInterceptorTokenSessionInterceptors:token

将标签放在表单中,您将永远不会再次提交相同的表单。令牌会话拦截器将尝试通过返回与第一种情况相同的响应来为您处理无效令牌。

评论

0赞 user2914906 12/9/2013
我已经尝试过使用 tokenSession,但它仅适用于刷新,然后双击