session实现防止重复提交,以及验证
参考文档
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实现防止重复提交,以及验证的更多相关文章
- JAVA–利用Filter和session防止页面重复提交
JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览 ...
- javaEE开发中使用session同步和token机制来防止并发重复提交
javaEE开发中使用session同步和token机制来防止并发重复提交 通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可 ...
- 防CSRF攻击:一场由重复提交的问题引发的前端后端测试口水战
重复提交,这是一直以来都会存在的问题,当在网站某个接口调用缓慢的时候就会有可能引起表单重复提交的问题,不论form提交,还是ajax提交都会有这样的问题,最近在某社交app上看到这么一幕,这个团队没有 ...
- php通过token验证表单重复提交
PHP防止重复提交表单 2016-11-08 轻松学PHP 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后 ...
- 使用session防止表单进行重复提交
我们都知道可以通过js的方法来实现防止表单重复提交,但是js只适用于“在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交” 的情况下进行操作, 那如果碰到“表单提交后用户点击[刷新 ...
- 弹出窗口Session丢失、防止表单重复提交问题
一.弹出窗口Session丢失问题 弹出窗口Session丢失使用window.showModalDialog进行信息的提示,相当方便,也容易控制外观和布局.但是存在一个严重的问题,就是Session ...
- java web学习总结(十三) -------------------使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- JavaWeb---总结(十三)使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- 使用session防止重复提交
一.表单重复提交的常见应用场景 <%@ page language="java" import="java.util.*" pageEncoding=&q ...
随机推荐
- Spring 4.1+ 的 JSONP使用
如今的巨石应用已经越来越不行了,很多互联网在后期都会在用分布式的架构 那么在页面上不同的服务调用不同域名下的json是有问题的 (跨域:不同域名,相同域名但是不同端口) JavaScript规范中提到 ...
- 转: 最值得阅读学习的 10 个 C 语言开源项目代码
from: http://www.iteye.com/news/29665 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同 ...
- Android应用性能优化之使用SparseArray替代HashMap
HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...
- [经验分享] 最近调试FT232H遇到的坑
cnblogs.com Yeats叶子 原创,转载请注明原始地址 - http://www.cnblogs.com/xiedidan/p/ft232h-poc.html Abstract FT232H ...
- 一段后台C#查询SQL Server数据库代码
using System; using System.Data; using System.Collections.Generic; using System.Linq; using System.W ...
- Java集合---面试题
HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...
- js字符串截取函数slice()、substring()、substr()
摘要 在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与 ...
- [C++] 如何查看DLL有哪些函数
Visual Studio里面自带了一个工具 dumpbin. 打开VS的command line,输入dumpbin可以查看帮助. 我们查看导出函数的话,使用选项/EXPORTS. 如果函数太多,可 ...
- [MetaHook] R_SparkStreaks
By hzqst void R_SparkStreaks(vec_t *pos, int count, int velocityMin, int velocityMax) { int i; parti ...
- MVC采用HtmlHelper扩展和Filter封装验证码的功能
最近因为有个项目除了登录还有其他很多地方需要用到验证码的功能,所以想到了采用HtmlHelper和ActionFilter封装一个验证码的功能,以便能够重复调用.封装好以后调用很方便,只需在View中 ...