JAVA 表单防止重复提交方案
来源:互联网 发布:北京百度快速排名优化 编辑:程序博客网 时间:2024/04/28 07:58
前提 : 做web 开发避免不了,表单重复提交产生脏数据的情景,
原理: 以一个注册业务例,如果页面提交按钮没有受到控制,在快速连续点击提交时,会提交生成多条注册申请信息
解决方案为: 在注册页面刚打开的时候 给定一个随机数字,标识页面(存储在session) , 在程序后台通过校验随机数字来判断是否同一个页面多次提交的注册申请
代码事例: 由于可能在项目的多个地方都会使用,故提出到公共的 .tag
-------------------Constants.java---------------
/** 表单token的session名称*/public static final String FORM_TOKEN_SESSION_NAME = "__BSP_FORM_TOKEN";
-------------formToken.tag-----------------------
<%@tag import="com.bsteel.common.Constants"%><%@tag import="java.util.UUID"%><%@ include file="/pages/common/tag.jsp"%><%request.getSession(false).setAttribute(Constants.FORM_TOKEN_SESSION_NAME, UUID.randomUUID().toString());%><input type="hidden" id="formToken" name="formToken" value="<%=session.getAttribute(Constants.FORM_TOKEN_SESSION_NAME)%>"/>
--------------------tag.jsp--------------------
<%@ taglib prefix="bsp" tagdir="/WEB-INF/tags" %>----------------jsp页面如何使用刚刚定义的formToken.jsp--------------
form表单内:
<bsp:formToken ></bsp:formToken>
---------------------java 后台的校验(写公共方法)-------------------------------------------------
/** * 检测表单是否重复提交 * @param request HTTP请求 * @return 重复提交则返回true,否则false */public void isRepeatSubmit() { HttpServletRequest request = RequestHolder.getRequest(); String serverToken = (String) request.getSession(false).getAttribute(Constants.FORM_TOKEN_SESSION_NAME); if (StringUtils.isEmpty(serverToken)) { throw new CommonException("请勿重复提交"); } String clientToken = request.getParameter("formToken"); if (StringUtils.isEmpty(clientToken)) { throw new CommonException("表单token丢失"); } if (!clientToken.equals(serverToken)) { throw new CommonException("请勿重复提交"); } request.getSession().removeAttribute(Constants.FORM_TOKEN_SESSION_NAME);}
0 0
- JAVA 表单防止重复提交方案
- java web项目防止表单重复提交的实现方案
- java 防止表单重复提交
- java防止表单重复提交
- java 防止表单重复提交
- java防止表单重复提交
- Java防止表单重复提交
- java防止表单重复提交
- Java防止表单重复提交
- Java 防止表单重复提交
- 防止表单重复提交 java
- java防止表单重复提交
- JAVA防止重复和非法提交表单
- java防止表单重复提交后退等
- 11 java 王少飞-防止表单重复提交
- JAVA Web防止表单重复提交实例
- java中防止表单的重复提交
- Java 令牌机制 防止表单重复提交
- 如何快速转载CSDN中的博客
- Kafka安装部署
- android 中this的用法,从小的地方看起
- [大数据]大数据框架Hadoop和Spark的异同
- Intellij IDEA tomcat配置
- JAVA 表单防止重复提交方案
- mysql5.7命令行突然消失解决办法
- C#运算符大全_各种运算符号的概述及作用
- Webcollector 判定爬虫结束
- 在表单必填项之前加上提示
- Web全栈笔记之全选反向(新手必备)
- [求助]关于在状态栏显示自定义坐标系下鼠标指针所在位置坐标的问题
- Self-Contained Container(自包含容器)
- 飞思卡尔mx6_sabresd_board_init