参考文档

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. Android Sdk 和ADT Eclipse安装配置步骤

    由于我们之前下载的jdk版本是1.6的,所以后面的andriod  sdk等版本需要相对应.安装文件我都放在云盘里面,需要的可以下载 一:如果单独安装每一个软件,先期需要下载的软件包如下: 1.JDK ...

  2. java 21 - 7 IO流小结的图解

  3. flex布局滑动页面

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  4. Android studio导入eclipse项目混淆打包出错

    将proguard-android.txt复制一份重命名成proguard-rules.pro,且在build.gradle添加 release {             minifyEnabled ...

  5. ndk开发教程以及问题解决方案

    一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语 ...

  6. 整理MAC下Eclipse的常用快捷键

    整理Eclipse常用快捷键 开发环境切换到Mac下后原来Window下的快捷键很大一部分是不相容的,习惯了快捷键的生活忽然哪天快捷键不起作用了,跟着的就是开发效率明显降低,频繁录入错误的快捷键让Ec ...

  7. Linux Linux程序练习五

    题目:编写两个进程a和b,利用共享内存技术,a向共享内存写字符串,b将从共享内存中读到的字符串在屏幕上打印出来. //创建共享内存区 #include <stdio.h> #include ...

  8. C++ c++初识

    //c++初识 #include<iostream> //包含c++标准头文件 //<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上, ...

  9. UTF-8 带签名和不带签名的区别

    就和字面上一样,带签名的UTF-8文件比不带签名的,在文件开头的地方就多了几个16进制字符--[EF BB BF ],这9个字符就是"签名",这样做的好处是让文本处理工具或者浏览器 ...

  10. 储存与更新 access_token

    做微信的项目,一开始就是 access_token 的申请,微信文档上写的比较清楚: 1.为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器.而其他业务逻辑服务 ...