在web中,防止刷新带来的数据插入

来源:互联网 发布:政务数据共享平台 杭州 编辑:程序博客网 时间:2024/06/07 09:26

在web开发中,自己对表的增删查改是非常基本的操作,在编辑页面进行插入数据完成保存到数据库中时候,如果刷新页面将插入一条重复的数据。自己解决办法,用session request 令牌机制。

 

自己编写的一个工具列

 

package com.wei.ssi.utils;

/**
 * 防止表单重复提交工具
 * @author Sunny
 *
 */
public class TokenUtils {

 private static String cons = "@_____@token@________@";

 public static String setToken(javax.servlet.http.HttpServletRequest request) {
  javax.servlet.http.HttpSession session = request.getSession();
  String token = String.valueOf(java.util.UUID.randomUUID())
    + String.valueOf(System.currentTimeMillis());
  session.setAttribute("@_____@token@________@", token);
  String html = "<input type=\"hidden\" name=\"@_____@token@________@\" value='"
    + token + "'/>";
  return html;
 }

 public static boolean isToken(javax.servlet.http.HttpServletRequest request) {
  javax.servlet.http.HttpSession session = request.getSession();
  String token = (String) session.getAttribute(cons);
  if (token == null)
   token = "";
  String tv = request.getParameter(cons);

  session.removeAttribute(cons);
  return token.equals(tv);

 }
}

 

用的springmvc 框架在 save 方法里加上

@RequestMapping("/save")
 public ModelAndView save(HttpServletRequest request,SmSysparameter bean){
  //防止表单重复提交
  if(!TokenUtils.isToken(request)){
    log.error("表单重复提交");
    return new ModelAndView("duplicateSubmit");
  }

    ………………………………

 }

 

在jsp 页面上加上

<%=com.wei.ssi.utils.TokenUtils.setToken(request) %>

就可以实现了,效果如图

 

原创粉丝点击