java 防止重复提交

来源:互联网 发布:策略交易软件靠谱吗 编辑:程序博客网 时间:2024/06/07 11:47

放在重复提交:

1、页面多次点击按钮

解决办法:javascript控制提交,将submit改成button提交

<script type="text/javascript">var flag = false;function ButtonSubmit(){if(!flag){document.forms[0].submit();flag = true;}}</script>
2、提交完毕后,在保存页面重复刷新,一直执行保存方法

解决办法:在新增页面设置uuid,放在request,session中,将request数据放在保存页面隐藏域中。在保存的方法中取到。与session中的数据比较,如果相同就执行保存方法,保存完毕后就清除session中的值。

package com.mail.util;import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.StringUtils;public class TokenUtil {private TokenUtil(){}/** * 在提交页面放唯一token * @param request */public static void addToken(HttpServletRequest request){String key = UUID.randomUUID().toString();request.setAttribute("key", key);//保存页面放在隐藏域中String sessionInRequest = UUID.randomUUID().toString();request.setAttribute("keyInSession", sessionInRequest);//放在隐藏域中,不同页面不同sessionrequest.getSession().setAttribute(sessionInRequest, key);}/** * 保存页面比较拿到的值是否相等 * @param request * @return 值是否相等 */public static boolean getTokenUtil(HttpServletRequest request){String key = request.getParameter("key");//从保存页面拿隐藏域String sessionInRequest = request.getParameter("keyInSession");String keyInSession = (String) request.getSession().getAttribute(sessionInRequest);return !StringUtils.isNotEmpty(keyInSession)&&StringUtils.isNotEmpty(key)&&key.trim().equals(keyInSession.trim());}/** * 保存完毕后,清楚session中的值 * @param request */public static void validate(HttpServletRequest request){String sessionInRequest = request.getParameter("keyInSession");request.getSession().removeAttribute(sessionInRequest);}}