如何避免二次提交的可能方案
来源:互联网 发布:ubuntu libxml 编辑:程序博客网 时间:2024/05/13 19:57
二次提交目前做法
控制方式:
由于咱们前期曾经尝试过通过把按钮置灰的方式来控制二次提交,所以此次尝试前台和后台结合的方式来控制二次提交;
原理:
在需要防止二次提交的页面,增加 一个 令牌 token ,在提交的时,拿此token与 平台预先定义好的并存放在session中的token做比较,如果相等,则放行,然后把session的token给修改掉(此处有几处需要还原token的逻辑),如果不相等(即二次或者多次提交的情况),则屏蔽此次提交;
代码实现:
1. 在页面增加token隐藏域,value 值为uuid生成的随机码,同时在session中保留一份,
2. 增加拦截器PreventSecondSubmitInterceptor,完成页面上提交的token与 session中token的对比
3. 增加header标识;这个存在争议,看看是否有更好的办法?现在这个是解决直接output输出的这种情况;
增加此标识解决的问题是:如果是验证逻辑,目前咱们系统的代码基本上都是往前台直接输出的,想要还原session,就需要记录此种情况。
个人建议:其实咱们系统中是支持直接抛异常的来处理验证这种情况,建议废除,直接output这种方式,这样只需要catch一下,就搞定了,不需要增加header,是为了兼容;
咱们系统的ajaxsave 方法及其与其关联的两个方法inisave和postsave,建议不要把异常吃掉,建议抛出;因为异常拦截器,已经处理了此种情况;(应该可以解决,目前没有做验证)
4. sesssion token对应的类型是map,原来是字符串,修改的原因:解决多层弹出编辑页面,父页面不能提交的问题;
struts解决此问题的方法是:自己需要指定 隐藏域的 name,不然也会出现此问题;
struts的二次提交解决方案:有兴趣的可以研究研究;两个拦截器:
TokenInterceptor与TokenSessionStoreInterceptor
区别是:第一个拦截器,重复提交时,跳转到一个中间页面
第二个拦截器,重复提交时,跳转到正常提交后的返回页面,只是除了第一次请求正确执行外,其他被屏蔽,这个操作对用户透明,用户是感觉不到的;咱们系统目前没有发现这个问题;
- 如何避免二次提交的可能方案
- 二次提交的避免方法(源于互联网)=>个人总结
- 如何避免表单的重复提交
- 如何避免表单的重复提交
- JSP避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- Jsp避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- JSP、Struts避免Form重复提交的几种方案
- jsp、struts避免form重复提交的几种方案
- JSP避免Form重复提交的三种方案
- JSP避免表单重复提交的三种方案
- JSP避免Form重复提交的三种方案
- JSP避免Form重复提交的三种方案
- py2exe使用方法
- extjs面向对象二
- WCHAR,CHAR,TCHAR的区别
- extjs事件demo
- 设置网页标题图片
- 如何避免二次提交的可能方案
- 看清上市公司的财务分析
- windows下写shell的一个容易出错的地方
- 截图工具和屏幕颜色分析工具下载
- win7系统下用opencv读取摄像头出现的proxytrans.ax问题
- 90岁老股民劝散户炒股一定要记住十句话
- The Pairing-Based Cryptography Library的学习
- #AzureChat - 自动伸缩和虚拟机
- 前端显示server端的数据