Liferay研究之二十:如何防止连续重复提交
2008-04-15 14:20
204 查看
一般的解决连续重复提交的办法有以下几种。
方法一、提交后 禁用提交按钮(大部分人都是这样做的)
方法二、使用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.
方法一、提交后 禁用提交按钮(大部分人都是这样做的)
方法二、使用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.
相关文章推荐
- ASP.NET如何防止页面重复提交
- 如何防止表单重复提交
- 如何防止刷新页面重复提交数据的问题
- php中如何防止表单的重复提交
- liferay防止form表单重复提交
- 如何防止struts中的重复提交
- 如何使用Struts 2防止表单重复提交?
- 在javaweb项目里如何防止一个表单重复提交
- 如何防止重复提交问题?
- 一道面试题:如何防止异步请求的重复提交
- 如何防止表单重复提交
- 如何使用Struts 2防止表单重复提交?
- 防止快速连续点击按钮重复提交数据之一(自定义方法实现)
- 让框架内的页面跳出框架及如何防止表单重复提交
- struts2如何防止重复提交
- asp.net中如何防止用户重复点击提交按钮
- 如何防止用户后退重复提交表单
- 如何防止表单重复提交
- [导入]ASP.NET如何防止页面重复提交
- 如何防止表单重复提交