参考文档

1.生成Token的参考文档.http://www.cnblogs.com/TianFang/p/3180899.html

2.主要参考文档.http://www.cnblogs.com/xdp-gacl/p/3859416.html

实验的思路在js页面用在一个循环中执行多次post请求,然后看后来的输出

相关代码

controller里面

@RequestMapping(value = "/savebook")
public void saveBook(HttpServletRequest request,HttpServletResponse response)
{
//logger.info("into saveBook");
boolean isrepeatSubmit = bookService.isRepeatSubmit(request);
//如果是重复提交应该如何处理,不加入数据就可以了不要return null,return会使页面报异常
if(isrepeatSubmit)
{
logger.info("is repeat submit");
}
else
{
logger.info("first submit");
}
}

isRepeatSubmit方法

@Override
public boolean isRepeatSubmit(HttpServletRequest request)
{
String clientToken = request.getParameter("token");
String serverToken = (String) request.getSession().getAttribute("token");
if (clientToken == null)
{
return true;
}
if (serverToken == null)
{
return true;
}
if(!serverToken.equals(clientToken))
{
return true;
}
request.getSession().removeAttribute("token");
return false;
}

上面的代码一定要注意最后在返回false之前 ,要把token从session中去除

js中的代码

<script type="text/javascript">
window.onload = function(){
//alert("123");
//var saveUrl = "http://localhost:8080/springMVC/savebook";
//${basePath}book_save"
var saveUrl = '${basePath}savebook';
var i= 0;
for(;i<5;i++)
{
sendSaveRequest(saveUrl);
}
} function sendSaveRequest (saveUrl){
$.post(
saveUrl,
{"token":$("#token").val()},
function()
{
return;
}, "text"
); }
十二月 12, 2015 3:16:16 下午 app05a.controller.BookController saveBook
信息: first submit
十二月 12, 2015 3:16:16 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:16:16 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:16:16 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:16:16 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:31:18 下午 app05a.controller.BookController saveBook
信息: first submit
十二月 12, 2015 3:31:18 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:31:18 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:31:18 下午 app05a.controller.BookController saveBook
信息: is repeat submit
十二月 12, 2015 3:31:18 下午 app05a.controller.BookController saveBook
信息: is repeat submit

上面是运行结果

session实现防止重复提交,以及验证的更多相关文章

  1. JAVA–利用Filter和session防止页面重复提交

    JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览 ...

  2. javaEE开发中使用session同步和token机制来防止并发重复提交

    javaEE开发中使用session同步和token机制来防止并发重复提交 通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可 ...

  3. 防CSRF攻击:一场由重复提交的问题引发的前端后端测试口水战

    重复提交,这是一直以来都会存在的问题,当在网站某个接口调用缓慢的时候就会有可能引起表单重复提交的问题,不论form提交,还是ajax提交都会有这样的问题,最近在某社交app上看到这么一幕,这个团队没有 ...

  4. php通过token验证表单重复提交

    PHP防止重复提交表单 2016-11-08 轻松学PHP 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后 ...

  5. 使用session防止表单进行重复提交

    我们都知道可以通过js的方法来实现防止表单重复提交,但是js只适用于“在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交” 的情况下进行操作, 那如果碰到“表单提交后用户点击[刷新 ...

  6. 弹出窗口Session丢失、防止表单重复提交问题

    一.弹出窗口Session丢失问题 弹出窗口Session丢失使用window.showModalDialog进行信息的提示,相当方便,也容易控制外观和布局.但是存在一个严重的问题,就是Session ...

  7. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  8. JavaWeb---总结(十三)使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  9. 使用session防止重复提交

    一.表单重复提交的常见应用场景 <%@ page language="java" import="java.util.*" pageEncoding=&q ...

随机推荐

  1. nginx 一二事(1) - 简单图片服务器解决方案

    最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的 今天再这里简单讲一下上传图片以及图片服务器的大致理念 如果是个人项目或者企业小项目,仅仅只有十来号人使 ...

  2. -bash: wget: command not found的两种解决方法

    今天给服务器安装新环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装,这里是CentO ...

  3. 转: 在创业公司使用C++

    from: http://oicwx.com/detail/827436 在创业公司使用C++ 2016-01-04开发资讯 James Perry和朋友创办了一家公司,主要是做基于云的OLAP多维数 ...

  4. 获取一个字符串Hello world中world首次出现的位置

    获取一个字符串Hello world中world首次出现的位置 var str=“Hello world!” document.write(str.indexOf("world") ...

  5. 思科产品选型pdf

    以前做工程时候想起了设备选型时候用过的一份文档. 有个小伙伴今天问起思科设备选型,恰好google到了这份文档 https://www.cisco.com/web/CN/products/pdf/04 ...

  6. ScrollView 简单出错

    ScrollView can host only one direct child 主要是ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLa ...

  7. LeetCode:Remove Duplicates from Sorted Array I II

    LeetCode:Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place su ...

  8. Opencv step by step - 图像融合

    两个图像的融合就是像素的融合了,其实手动操作即可,用函数操作更方便了. 下面代码的作用是融合阿狸和doctor,很和谐有木有! #include <cv.h> #include <h ...

  9. 学习笔记——Maven实战(一)坐标规划

    坐标是什么?为什么要规划? 坐标是Maven最基本的概念,它就像每个构件的身份证号码,有了它我们就可以在数以千万计的构件中定位任何一个我们感兴趣的构件.举个最简单的例子,如果没有坐标,使用JUnit的 ...

  10. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...