Liferay研究之二十:如何防止连续重复提交
来源:互联网 发布:acronis备份软件 编辑:程序博客网 时间:2024/04/30 04:18
一般的解决连续重复提交的办法有以下几种。
方法一、提交后 禁用提交按钮(大部分人都是这样做的)
方法二、使用Session, session里面加令牌,第一次设置一个值,以后请求先与这个令牌进行比较;
方法三、数据处理成功马上Redirect到另外一个页面
Liferay中前台使用了客户端脚本(可能是JQuery,没仔细研究)、Session,后台采用同步、多线程等来解决这个问题。服务端解决的具体思路如下:
在Session中放一个DoubleClickControlor的实例,然后对这个实例进行同步,来判断是否重复提交请求。
如果重复提交请求,则判断哪个是firstRequest,哪个不是,不是的话就以DoubleClickControlor的实例为同步依据,进入一个等待状态,直到firstRequest执行完,调用notifyAll方法,激活第二次请求。
在DoubleClickFilter中,controller.control(httpReq, httpRes, chain);第二次请求会没有任何异常结束,这样会执行ok = true; 进而在控制台打印出阻止一次重复提交等信息。
另外,补充温习一个FilterChain的知识点。
向服务器发起一个请求时,在访问所请求的资源之前,会先通过Filter Mapping配置来匹配有哪些Filter需要被执行。所有的Filter根据filter-mapping定义的顺序形成一个FilterChain,依次进行调用。
这个调用有点类似于递归,在调用到chain.doFilter()时,程序执行主线会跳转到下一个Filter的doFilter方法中,直到最后一个Filter, 最后一个filter执行chain.doFilter时不执行操作,也不会跳转到其他Filter,会将chain.doFilter之后的代码执行完,退出doFilter方法,然后执行倒数第二个Filter的chain.doFilter后面的代码,依此类推。
Liferay中通过system.properties来设定开启或关闭哪个Filter.
- Liferay研究之二十:如何防止连续重复提交
- 防止快速连续点击按钮重复提交数据之二(定时器实现)
- liferay防止form表单重复提交
- 如何防止重复提交
- 如何防止表单重复提交
- struts2如何防止重复提交
- 如何防止表单重复提交
- 如何防止重复表单提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何防止用户重复提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何防止表单重复提交
- 数字日期转化为汉字日期格式...
- C#垃圾回收
- 【南京.NET聚会活动】4月26号榴园宾馆新华厅微软Visual Studio 2008新技术巡展
- linux上的输入法问题
- 组合模式
- Liferay研究之二十:如何防止连续重复提交
- java 创建xls文件实战
- 真想扁我们项目经理一顿
- Delphi調用.NET的WebService
- 对法国人的印象(摘自在法留学生的博客)(转自天涯)
- “黄金互助基金”(Gold Pool)
- 谈谈WINDOWS下重装系统后oracle的恢复
- 解决编译错误:LIBCD.lib(crt0.obj) :error LNK2001: unresolved external symbol _main
- 代码完成的实现