码迷,mamicode.com
首页 > 编程语言 > 详细

Servlet、SPringMVC、Struts等防止表单重复提交的多种处理方法

时间:2014-08-06 19:12:32      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:spring   token   拦截器   表单重复提交   

第一种处理方法(非拦截器):

       目前这种方法不建议,因为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等防止表单重复提交的多种处理方法,布布扣,bubuko.com

Servlet、SPringMVC、Struts等防止表单重复提交的多种处理方法

标签:spring   token   拦截器   表单重复提交   

原文地址:http://blog.csdn.net/pqszq1314/article/details/38403431

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!