参考文档

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. 发布资源到Asset Store

    导入unitypackage右上角没有图标? 每当导入从Asset Store下载的资源时,总会看到右侧有个ICON 而我们自己导出的*.unitypackage ,当我们再次导入时,在右侧就没有此图 ...

  2. Unity键值(KeyCode)

    Unity的Input管理 keyCode示例 keyCode Demo function OnGUI(){ var e:Event=Event.current; if(e.isKey){ Debug ...

  3. xshell5.0实现中键复制

    1. 右建点击黑色屏幕 2. 在打开选项 3. 勾选 ""

  4. 13Mybatis_SqlMapConfig.xml专题讲解

    Mybatis的SqlMapConfig.xml中以下的标签: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器 ...

  5. 了解了这些才能开始发挥jQuery的威力(转)

    链接:http://www.cnblogs.com/dolphinX/archive/2013/10/08/3347677.html 由于当前jQuery如此的如雷贯耳,相信不用介绍什么是jQuery ...

  6. 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

    目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...

  7. benchmark

    redis benchmark How many requests per second can I get out of Redis? Using New Relic to Understand R ...

  8. mysql5.7.12直接解压zip包,安装过程

    MySQL-5.7.12-winx64.zip解压安装方式 1.解压文件到你想要安装的位置.     本人是直接解压到E盘. 2.配置环境变量,在path中放入:E:\mysql-5.7.12-win ...

  9. [CareerCup] 8.9 An In-memory File System 内存文件系统

    8.9 Explain the data structures and algorithms that you would use to design an in-memory file system ...

  10. [CareerCup] 11.6 Search a 2D Matrix 搜索一个二维矩阵

    11.6 Given an M x N matrix in which each row and each column is sorted in ascending order, write a m ...