我有一个问题,当我提交表单(按ENTER键或点击鼠标)-如果我按它x倍快,然后实际视图被重新创建(例如十次在一秒钟),表单数据发送十次和十次被保存到数据库。
无论是否有一些验证,例如检查数据只能保存一次。
下一次提交,视图刷新后,工作正常。数据没有保存,因为验证器正在工作。
所以,恶意用户填写表单,而不是正常提交,他快速点击提交按钮,直到视图被重建,我有X记录在数据库中,而不是一个:-)
我怎样才能防止这种奇怪的行为?
如何禁止按提交按钮,直到视图重建?
您可能想要添加一些像DoubleClickFilter到您的web.xml
。另一种方法是使用Tokens
,您验证每个请求并在第一个请求后失效,以便后续请求无法通过您的验证。
解决方案:
//Initialize our submit flag to false
var formSubmitted = false;
/**
* Prevent from submitting a form more than once
* @returns {Boolean}
*/
function submitForm()
{
//has the form been submitted before?
if( formSubmitted == true )
{
alert("This form has already been submitted!");
return false;
}
formSubmitted = true;
return true; // Submit form
}
和提交按钮:
<h:commandButton ... action="#{bean.action}" onclick="return submitForm();"/>