Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法
2014-08-11 15:18
435 查看
第一种处理方法(非拦截器):
眼下这样的方法不建议,由于JSP规范不建议写JAVA代码。这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制。
1、在须要防止反复的jsp中添�以下的java代码,
from表单中添�隐藏域
<input type="hidden" name="formhash" id="formhash" value="<%=formhash%>" />
3、后台代码 推断是否反复提交
另外一种处理方法(拦截器):
假设用过Struts2的,能够參考Struts2的Token相关机制就可以。以下的实现是SpringMVC/SPring/Mybatis项目中实现的方法。(代码稍后整理贴出)
眼下这样的方法不建议,由于JSP规范不建议写JAVA代码。这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制。
1、在须要防止反复的jsp中添�以下的java代码,
<%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="java.util.HashSet"%> <% //生成一个Token,算法能够自己定,不随便反复就能够了 Random ran = new Random(); String formhash = String.valueOf(ran.nextInt()); //读取当前session里面的hashCode集合,此处使用了Set,方便推断。 Set<String> token= (Set<String>) session.getAttribute("token"); if (token== null) { token = new HashSet<String>(); } // 检測反复问题 while (token.contains(formhash)) { formhash = String.valueOf(ran.nextInt()); } // 保存到session里面 token.add(formhash); // 保存 session.setAttribute("token", token); %>2、
from表单中添�隐藏域
<input type="hidden" name="formhash" id="formhash" value="<%=formhash%>" />
3、后台代码 推断是否反复提交
Map<String,String> map = new HashMap<String,String>(); // 拿到表单的formhash String formhash = request.getParameter("formhash"); // 拿到session里面的集合 Set<String> token= (Set<String>) request.getSession().getAttribute("token"); // 假设没有,则是反复提交,或者非法提交 if (token== null || !token.contains(formhash)) { map.put("flag", "false"); map.put("message", "已经提交成功,请勿反复提交!"); return map; } // 最后,假设操作成功,从session里面把这个formhash 删掉! token.remove(formhash); request.getSession().setAttribute("token", token);假设反复提交了,直接return错误信息给页面就可以。
另外一种处理方法(拦截器):
假设用过Struts2的,能够參考Struts2的Token相关机制就可以。以下的实现是SpringMVC/SPring/Mybatis项目中实现的方法。(代码稍后整理贴出)
相关文章推荐
- Servlet、SPringMVC、Struts等防止表单重复提交的多种处理方法
- 防止重复提交表单---Struts中Token的使用方法
- 防止重复提交表单---Struts中Token的使用方法
- jsp servlet 乱码处理方法-表单提交的 pos 和get 方式
- Form表单提交到Servlet处理的正确方法
- springMVC中基于token防止表单重复提交方法
- 使用Jquery Validation插件防止重复提交表单的解决方法
- 防止表单重复提交的巧妙方法
- ASP防止重复多次提交表单的方法
- asp.net中回车提交表单的处理方法
- struts解决表单重复提交方法!
- 用JavaScript防止重复提交表单form的两种方法
- 一种表单重复提交处理方法
- struts中form表单提交给Servlet中文乱码问题
- get方法提交表单的乱码处理
- Jquery Validation插件防止重复提交表单的解决方法
- 实践struts之token防止回退重复提交表单
- 重复提交、重复刷新、防止后退的问题以及处理方法
- struts表单中多个submit的处理方法:org.apache.struts.actions.LookupDispatchAction
- 传智播客Java web学习,url编码及防止表单重复提交的两种方法