当前位置:首页 > Java

java如何防止表单重复提交

2026-03-17 19:32:12Java

使用Token机制防止重复提交

在表单页面生成一个随机Token(如UUID),存储在Session或Redis中。提交表单时携带该Token,服务器验证后立即清除Token。若重复提交,Token已失效导致验证失败。

// 生成Token示例
String token = UUID.randomUUID().toString();
request.getSession().setAttribute("formToken", token);

// 验证Token示例
String sessionToken = (String) request.getSession().getAttribute("formToken");
if (sessionToken == null || !sessionToken.equals(request.getParameter("token"))) {
    return "error:重复提交";
}

前端按钮禁用技术

通过JavaScript在表单提交后立即禁用提交按钮,防止用户多次点击。可结合CSS设置禁用状态样式提升用户体验。

document.getElementById("submitBtn").addEventListener("click", function() {
    this.disabled = true;
    this.form.submit();
});

重定向模式(Post/Redirect/Get)

处理POST请求后返回302重定向至结果页面。浏览器刷新时只会重复GET请求,避免重复提交表单数据。Spring MVC中可通过redirect:前缀实现。

@PostMapping("/submit")
public String handleSubmit(Form form) {
    // 处理表单数据
    return "redirect:/success";
}

请求限流控制

对相同IP或用户ID的请求进行限流,例如使用Guava RateLimiter或Redis实现计数器。设置合理时间窗口(如5秒内只允许1次提交)。

// Guava限流示例
RateLimiter limiter = RateLimiter.create(1.0); // 每秒1次
if (!limiter.tryAcquire()) {
    throw new RuntimeException("操作过于频繁");
}

数据库唯一约束

对业务关键字段添加数据库唯一索引。如订单号字段设置UNIQUE约束,重复提交时会触发异常,可通过事务回滚处理。

ALTER TABLE orders ADD UNIQUE (order_no);

幂等性设计

为每个请求分配唯一ID(如雪花ID),服务端记录已处理ID。重复ID直接返回之前的结果。适用于支付等关键业务场景。

java如何防止表单重复提交

// 幂等检查伪代码
if (redis.exists(requestId)) {
    return redis.get(requestId);
} else {
    // 处理业务
    redis.setex(requestId, 3600, result);
}

分享给朋友:

相关文章

css怎么制作表单

css怎么制作表单

基础表单结构 使用HTML创建表单元素,搭配CSS进行样式设计。表单通常包含<form>标签及输入控件(如<input>、<textarea>、<select…

vue表单实现

vue表单实现

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单输入与应用状态的双向绑定,适用于各类表单控件。例如文本输入框: <input v-model="message" plac…

jquery提交表单

jquery提交表单

使用 jQuery 提交表单 jQuery 提供了多种方法来提交表单,以下是常见的几种实现方式: 监听表单提交事件 通过监听表单的 submit 事件,可以阻止默认提交行为并执行自定义逻辑(如 Aj…

java如何防止反编译

java如何防止反编译

代码混淆 使用代码混淆工具对Java代码进行混淆处理,使反编译后的代码难以阅读和理解。常见的混淆工具包括ProGuard、Allatori、DashO等。混淆后的类名、方法名和变量名会被替换为无意义的…

react如何防止重复

react如何防止重复

防止重复渲染的方法 在React中,防止组件不必要的重复渲染是优化性能的关键。以下是几种常见的方法: 使用React.memo React.memo是一个高阶组件,用于对函数组件进行浅比较,避免在…

jquery表单验证

jquery表单验证

jQuery 表单验证的实现方法 使用 jQuery 实现表单验证可以通过原生 JavaScript 结合正则表达式,或借助插件如 jQuery Validation Plugin 完成。以下是两种常…