web服务器有多个节点如何防止表单重复提交

我知道有通过js控制页面,还有利用Session生成唯一标识符,但是当web服务器有多个节点如何防止表单重复提交

阅读 4.6k
4 个回答

在springmvc配置文件中加入拦截器的配置,当转到页面的请求到来时,生成token的名字和token值,一份放到redis缓存中,一份放传给页面表单的隐藏域。
当表单请求提交时,拦截器得到参数中的tokenName和token,然后到缓存中去取token值,如果能匹配上,请求就通过,不能匹配上就不通过。这里的tokenName生成时也是随机的,每次请求都不一样。而从缓存中取token值时,会立即将其删除(删与读是原子的,无线程安全问题)。

看下这个 蘑菇街防重复请求处理的实践与总结 链接描述

一次form请求只能去一个web节点就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题