struts的令牌机制解决重复提交是好的方案吗?

berg369 2013-11-28 09:10:54
看了一下Struts令牌的原理,用token机制解决重复提交问题,看似有效。
但是实际的情况,感觉这个功能很鸡肋。
我的重复提交主要是快速连续点击提交按钮造成的,这样浏览器连续发多个请求过去,根据token来判断,只有第一个请求被执行,后面的被拒绝,但是第一个请求执行完成的返回内容没有了,浏览器只能返回最后一个请求的结果,而这个请求被拒绝(空白或者导出错误页),用户无法知道是否提交成功了。
另外,如果点击提交按钮是ajax请求,连续点击时,第一个请求的执行结果json无法返回,而后面的请求被拒,无法返回正确的数据,而且,ajax请求时,页面不刷新,应允许正常的多次提交(如修改保存),仅防止快速点击按钮造成的重复提交,所以提交请求执行后,应重置session中的token,并把新token值返回用于重置页面中的隐藏域,使下一次提交时能够成功,但由于第一个成功的请求无法返回,token也无法重置,这样再点击提交按钮就总是报重复提交了。

有人说用前端解决,按钮点击后禁用,直到ajax返回再启用,或返回新页面内容或跳转到新页。但是这样的话,还要那个令牌机制干嘛?前端方案毕竟需要每个页面手写的,令牌机制则是框架层面的,如果能避免上述问题,才是最佳方案,是否我对struts令牌的理解有误?Struts也有这些问题吗?
...全文
401 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Luciferoffans 2013-11-29
  • 打赏
  • 举报
回复
除了token机制以外使用<action>标签下的type="redirectAction",后面接Action 的名字即可。
Giberson1 2013-11-29
  • 打赏
  • 举报
回复
请求是否成功和令牌无关系,令牌在请求过程中作用,进行匹配来判断是否要继续处理请求
  • 打赏
  • 举报
回复
点击一下 按钮直接变灰不就行了
teemai 2013-11-28
  • 打赏
  • 举报
回复
我觉得你第一个分析的有点道理。 但是ajax那个没问题,ajax有个参数叫async ,意思是是否异步请求,改成false。ajax请求之后,浏览器是不让做其他操作的,直到有返回值 async (default: true) Type: Boolean By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success(). 详细:http://api.jquery.com/jQuery.ajax/
北辰 2013-11-28
  • 打赏
  • 举报
回复
给个替代方案吧,操作成功后跳转到一个显示操作成功失败的页面,这样或许会好点
berg369 2013-11-28
  • 打赏
  • 举报
回复
楼上,我就是这么做的啊,我的问题是重复提交时没有正确的页面响应。
蟑螂-roach 2013-11-28
  • 打赏
  • 举报
回复
楼主,你能不能用session的原理那样做呢,每次提交都会设置一个唯一的表示过去,然后后面判断是否是唯一的呢,这样不就会避免重复提交了吗,session有一个sessionID,你自己可以了解下
berg369 2013-11-28
  • 打赏
  • 举报
回复
谢谢,试了一下,楼上说得对,ajax没有问题,async改成false就可以了。我在chrome中测试时,快速点击提交按钮,查看后台日志,第一个请求处理完成并返回数据后,才产生后面的请求的信息输出,并且都提示重复提交而没有返回; 这种模式能否用在非ajax请求中呢?要求浏览器每个请求必须返回?来解决非ajax重复提交造成的页面无响应
第1篇Struts 基础入门 6 第1章 Struts概述 8 1.1 JSP Framework - Struts介绍 8 1.2 Struts的体系结构 8 1.3 Struts1.0学习文档 8 1.3 JSP流行模板Struts的安装配置 8 1.4Struts 用户指南 8 1.5 你的第一个struts应用程序 8 第2章深入Struts结构 8 2.1人介绍应用框架 mvc和model2 8 2.2 Struts原理、开发及项目实施 8 2.3使用STRUST控制流 8 2.4讨论STRUTS的优缺点 9 2.5 Struts入门经验 9 2.6用strtus制作登陆页面: 9 第3章Struts 基础学习 9 3.1Struts标记库 9 3.2Struts框架基础篇 9 3.3Struts-config.xml配置文件讲解 3.4struts中文问题","struts国际化问题"??终极解决方案 9 3.5为 Web 服务构建 Struts 应用程序 9 3.6Struts标记库是如何工作的 9 3.7Struts 9 3.8struts简单例子的分析(含代码注释和配置文件说明) 9 3.9本章小结 10 第4章 配置STRUTS组件 10 4.1 Web 应用部署描述符 10 4.2 STRUTS配置文件 10 4.3 应用资源文件 10 4.4 ANT的构建文件 10 4.5 struts中的日志 10 4.6 运用你的struts 10 第5章 理解ActionForm 10 5.1 ActionForm的生命周期 10 5.2 ActionForm的作用 11 5.3 ActionForm的实践 11 5.4 组装ActionForm 11 5.5 Struts的动态表单的应用 11 第2篇 struts的执行 12 第6章 理解ActionForward 12 6.1 ActionForward 的最佳实践 12 6.2 使用运行时参数 12 6.3 使用动态转发 12 第7章 设计ActionMapping 12 7.1 理解ActionMapping 12 7.2 定义ActionMapping属性 12 7.3 使用局部和全局ActionForward 12 第8章 设计、使用Action 12 8.1 理解Action 12 8.2 使用基本的Action 13 8.3 Action的实践 13 8.4 Struts中的Action类的工作机制; 13 8.5 Struts中不同的Action和ActionForm组合 13 第9章Struts内置机制 13 9.1 Struts内置类DispatchAction 13 9.2 Struts内置类ForwardAction 13 9.3 Struts令牌机制,防止重复提交 13 9.4 StrutsAction单态陷阱,请谨慎使用全局变量 13 9.5 Struts异常处理 13 第10章 struts中使用国际化(i18n) 13 10.1 struts国际化程序尝试 13 10.1 Java对i18n的支持 14 10.1 struts框架中对国际化的支持 14 第11章 Validator验证框架 14 11.1 安装和配置Validator验证框架 14 11.1 Validator框架和Struts客户化标签 14 11.1 在Validator框架中使用JavaScript 14 11.1 在struts中用validator作服务器端验证 14 第12章 Struts HTML标签库 14 12.1 Struts中基本的HTML标签 14 12.1 Struts中表单处理的HTML标签 14 12.1 Struts中复选框和单选框的HTML标签 14 12.1 Struts下JSP页面传递复选框值技巧 15 12.1 Struts中下拉和选取/选项列表的HTML标签 15 12.1 Struts中html:errors的HTML标签 15 12.1 Struts中使用标签上传文件 15 第13章 Struts Bean标签库 15 13.1 如何获得Servlet上下文的有关内容 15 13.1 如何获得Java资源 15 13.1 如何获得Bean属性 15 13.1 使用Struts Bean标签保存与传输数据小实例 15 第14章 Struts Logic标签库 15 14.1 如何使用Logic标签进行基于值的条件显示 15 14.1 如何使用Logic标签进行字符串匹配 15 14.1 如何使用Logic标签来检测值是否存在 15 14.1 如何使用Logic标签来迭代 16 14.1 如何使用Logic标签标记来转移控制 16 14.1 在hello.jsp中使用Struts Logic标签库 16 第15章 Tiles标签库 16 15.1 struts中使用tiles组件 16 15.1 Tiles使用入门 16 第3篇 案例精讲 16 第16章 Struts分页显示 16 16.1 建立数据库 16

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧