java防止表单重复提交常用方法 
时间: 2023-05-19 07:02:56 浏览: 57
Java 防止表单重复提交的常用方法有以下几种:
1. 在表单中添加一个隐藏字段,用于存储一个随机数或时间戳,每次提交表单时,先验证该字段的值是否与服务器端保存的值一致,如果不一致,则认为是重复提交。
2. 使用 Token 验证机制,即在服务器端生成一个唯一的 Token,将其存储在 Session 中,并在表单中添加一个隐藏字段,用于存储该 Token 的值。每次提交表单时,先验证该 Token 的值是否与服务器端保存的值一致,如果不一致,则认为是重复提交。
3. 使用重定向机制,即在表单提交后,将用户重定向到一个新的页面,而不是直接返回结果。这样可以避免用户通过刷新页面或后退按钮重复提交表单。
4. 使用 JavaScript 禁用提交按钮,防止用户多次点击提交按钮。可以在表单提交后,将提交按钮禁用一段时间,或者直接隐藏提交按钮。
以上是 Java 防止表单重复提交的常用方法,具体选择哪种方法,需要根据具体情况进行选择。
相关问题
帮我写一个防止表单重复提交Java代码
好的,这是一种使用Java Servlet技术来防止表单重复提交的方法:
1. 在HTML表单中添加一个隐藏字段,在提交表单时将该字段的值存储在Session中,如:
```html
<form action="/submit" method="post">
<input type="hidden" name="token" value="${token}">
<!-- 表单内容 -->
</form>
```
2. 在Java Servlet中,在处理表单提交请求时,首先检查该隐藏字段的值是否存在于Session中,如果存在,则表示该表单是第一次提交,可以继续处理。如果不存在,则表示该表单已经提交过一次,不再处理,可以直接返回一个提示信息。
例如:
```java
String token = request.getParameter("token");
if (token == null || token.isEmpty()) {
// 表单提交时没有带上token字段,可能是重复提交的表单
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid form submission");
return;
}
HttpSession session = request.getSession();
Object tokenValue = session.getAttribute("form_token");
if (tokenValue == null || !token.equals(tokenValue)) {
// 表单提交时带上的token字段值与Session中的值不一致,可能是重复提交的表单
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid form submission");
return;
}
// 表单是第一次提交,继续处理
session.removeAttribute("form_token");
```
注意:
- 为了避免Session Hijacking攻击,建议在存储在Session中的隐藏字段值
java代码防止重复提交
防止重复提交的方法有很多种,其中比较常用的有以下几种:
1. 隐藏表单域:在表单中添加一个隐藏域,每次提交表单时检查该隐藏域的值是否已经被使用过,如果已经被使用过,则说明是重复提交,需要拒绝提交。
2. 重定向:提交表单后,服务器端处理完成后返回一个重定向响应,让浏览器重新向另一个页面发起请求,这样可以防止用户通过“后退”按钮再次提交表单。
3. Token 验证:在表单中添加一个唯一性的 Token,每次提交表单时验证该 Token 是否有效,如果无效,则说明是重复提交,需要拒绝提交。
下面是一个基于 Token 验证的 Java 代码示例:
``` java
public class TokenUtil {
public static final String TOKEN_PREFIX = "TOKEN_";
// 生成 Token
public static String generateToken() {
String token = UUID.randomUUID().toString();
// 将 Token 存入 Session
HttpSession session = request.getSession();
session.setAttribute(TOKEN_PREFIX + token, token);
return token;
}
// 验证 Token
public static boolean isValidToken(HttpServletRequest request) {
String token = request.getParameter("token");
if (token == null) {
return false;
}
HttpSession session = request.getSession();
Object sessionToken = session.getAttribute(TOKEN_PREFIX + token);
if (sessionToken == null || !sessionToken.equals(token)) {
return false;
}
// 验证通过后,从 Session 中移除 Token
session.removeAttribute(TOKEN_PREFIX + token);
return true;
}
}
```
在表单中添加一个隐藏域,用于存放 Token:
```html
<form method="post" action="submit.do">
<input type="hidden" name="token" value="${token}" />
<!-- 其他表单元素 -->
<input type="submit" value="提交" />
</form>
```
在服务器端处理表单提交时,先验证 Token 是否有效:
```java
if (!TokenUtil.isValidToken(request)) {
// Token 验证失败,拒绝提交
return "error";
}
// 处理表单提交
// ...
```
相关推荐
















