Spring Boot + Thymeleaf 防重复提交

在 Spring Boot 与 Thymeleaf 结合的 Web 应用中,防止重复提交可以采用token 机制 + 客户端禁用按钮的方式实现,在高并发场景下,考虑使用 Redis 存储 token 而非 Session。

第一步:后端实现

java 复制代码
@Controller
public class FormController {
    
    @GetMapping("/form")
    public String showForm(Model model) {
        // 生成唯一 token 并存入 session
        String token = UUID.randomUUID().toString();
        model.addAttribute("token", token);
        return "form";
    }
    
    @PostMapping("/submit")
    public String handleSubmit(@RequestParam("token") String token, 
                              HttpSession session) {
        // 验证 token
        if (!isValidToken(token, session)) {
            throw new RuntimeException("重复提交或无效 token");
        }
        // 处理表单数据...
        
        // 移除已使用的 token
        session.removeAttribute("token");
        return "success";
    }
    
    private boolean isValidToken(String token, HttpSession session) {
        // 实现 token 验证逻辑
        return token != null && token.equals(session.getAttribute("token"));
    }
}

第二步:前端实现 (Thymeleaf)

html 复制代码
<form th:action="@{/submit}" method="post">
    <!-- 其他表单字段 -->
    <input type="hidden" th:value="${token}" name="token" />
    <button type="submit">提交</button>
</form>
相关推荐
凤山老林12 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
凤山老林16 小时前
Spring Boot 定时任务进阶:动态 Cron 与集群防重实战
java·spring boot·后端·定时任务·集群定时任务
凤山老林18 小时前
Spring Boot 配置管理实战:多环境隔离、加密与 Nacos 热更新避坑指南
java·spring boot·后端
凤山老林20 小时前
可观测性落地:Spring Boot 3.x + Actuator + Prometheus + Grafana 监控体系搭建
spring boot·grafana·prometheus
agent89721 小时前
实战升级|SpringBoot WebSocket实现多轮对话AI流式问答(上下文记忆+自动重连+会话隔离)
人工智能·spring boot·websocket
白仑色21 小时前
Spring Boot 从切面统一控制事务
java·spring boot·aop·spring事务
凤山老林1 天前
Spring Boot 大文件处理实战:分片上传、断点续传与 OSS 集成
java·spring boot·后端·大文件上传·分片上传·断点续传
weixin_BYSJ19872 天前
springboot酒店管理系统--附源码27436
java·spring boot·python·随机森林·贪心算法·eclipse·django
砍材农夫2 天前
物联网实战|Spring Boot MQTT平台 |emqx broker实战
spring boot·spring·spring cloud·mybatis
西凉的悲伤2 天前
Spring Boot 中 Filter 过滤器详解
java·spring boot·后端·过滤器·filter