解决方法
有不同的方法来避免双重提交,可以组合起来:
>点击后使用JavaScript禁用该按钮几ms。这样可以避免不耐烦的用户在按钮上多次点击多次提交。
>提交后发送重定向,这被称为Post-Redirect-Get (PRG) pattern.这样可以避免用户在结果页面上按F5导致多次提交,忽略浏览器警告数据将重新发送,或者通过浏览器返回/转发来回浏览按钮,忽略同样的警告。
>在请求页面时生成唯一的令牌,并将其放在窗体的会话范围和隐藏字段中。在处理过程中,检查令牌是否存在,然后立即将其从会话中删除并继续处理。如果令牌不在那里,则进行块处理。这将避免上述种类的问题。
在Spring中,您可以使用RedirectView作为PRG模式的实现(如第2点所述)。另外两点需要自己实现。