教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 Liferay研究之二十:如何防止连续重复提交

Liferay研究之二十:如何防止连续重复提交

发布时间:2018-11-20   编辑:jiaochengji.com
教程集为您提供Liferay研究之二十:如何防止连续重复提交等资源,欢迎您收藏本站,我们将为您提供最新的Liferay研究之二十:如何防止连续重复提交资源

一般的解决连续重复提交的办法有以下几种。

方法一、提交后 禁用提交按钮(大部分人都是这样做的)
方法二、使用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研究之二十:如何防止连续重复提交
PHP防止重复提交表单的例子
Asp.net防止后退、刷新重复提交的方法
c#(asp.net)防止刷新重复提交数据的解决方法
Jquery提交表单 Form.js官方插件介绍
php防止sql注入函数(discuz)
ajax防止重复提交请求的多种实现方法
php token防止表单重复提交的实例代码
十天学会php之第六天
c#.net防止按F5刷新页面重复提交的方法

[关闭]
~ ~