【问题标题】:Prevent same action called twice as long as user is in current session只要用户在当前会话中,就防止调用两次相同的操作
【发布时间】:2013-12-06 13:49:51
【问题描述】:

我用的是Struts2框架,我的问题是

如果用户登录系统并点击了一些动作,比如ACTION1,流程将进入动作类并执行一些方法,返回适当的结果。 他可能会访问一些网页,然后再次点击ACTION1。

只要他在同一个会话中,现在控制不应该去那个特定的方法,但结果应该和以前的结果一样。

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

【问题讨论】:

  • 立即使用相同的方法,但结果可能不同,这取决于操作返回的值。
  • 我不想再次调用方法...可以吗?
  • 这取决于你如何控制用户会话?
  • 你好 Roman,谢谢你的回复,你能详细告诉我怎么做吗?我是 Struts 新手
  • 您的意思是缓存响应并阻止操作执行?我不建议对任何操作执行此操作。虽然静态文件已经被你的浏览器缓存了,你可以在你的 tomcat/apache/ngnix 服务器中设置一些级别的动作缓存

标签: java jsp struts2 double-submit-problem


【解决方案1】:

你可以试试tokenSession interceptor。

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

它将防止重复提交相同的操作或重复使用您通过s:token tag 提供的相同令牌。

说明

停止重复提交表单。

token标签用于帮助“双击”提交 问题。如果您使用的是 TokenInterceptor 或 TokenSessionInterceptor。 s:token 标签只是放置一个隐藏的 包含唯一标记的元素。

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

【讨论】:

  • 我已经尝试过使用 tokenSession 但它只适用于刷新,然后双击
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
相关资源
最近更新 更多