java 防止表单的重复提交-令牌机制

没有完整的进行一次请求页面->提交页面的过程而完成数据提交 
一.造成重复提交的原因:
   1.由于服务器缓慢或网络延迟的原因,重复点击提交按钮
   2.已经提交成功,刷新成功页面(forward)
   3.已经提交成功,通过回退,再次点击提交按钮

注意:
回退后,刷新表单页面,再次提交这时不是重复提交,而是发送新的请求
      在Firefox下,重复提交到同一地址无效

能用URL重定向就使用URL重定向


二.表单重复提交的问题的实质:
      没有先请求页面,就直接在提交数据
      解决方案:令牌机制

三.基本操作:

      在后台先生成一串随机数,然后将随机数放到Session,同时在JSP页面中使用EL表达式将Session中的数据放在表单的隐藏域中。提交表单后,如果jsp页面input标签中隐藏域的提交的valueye和后台session中拿到

的session中RandomCode一致,就表示不是重复提交,并且清空session.如果不一致就是重复提交。

JSP页面:input< type='hidden',name='randomCode' value ='RandomCode_in_Session'>

Serverlet1或者JSP页面:

            <%    String randomCode = UUID.Random.toString     session.setAttribute("RandomCode_in_Session")                %>

Servlet2: 获取input标签传递后台的值和从session中的值比较,相同清空,不是重复提交                                                                                 session.remove("RandomCode_in_Session"),不相同就是重复提交,return;

猜你喜欢

转载自blog.csdn.net/m0_38068812/article/details/82714616