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>
相关推荐
whltaoin18 小时前
【Spring Boot 注解解析】Bean 生命周期注解深度解析:@PostConstruct 与 @PreDestroy 面试高频考点 + 实战案例
java·spring boot·面试·bean生命周期
喝杯绿茶20 小时前
springboot中的事务
java·spring boot·后端
麦兜*20 小时前
多阶段构建:打造最小化的 Spring Boot Docker 镜像
java·spring boot·后端·spring cloud·docker
shepherd11120 小时前
破局延时任务(下):Spring Boot + DelayQueue 优雅实现分布式延时队列(实战篇)
java·spring boot·后端
lang2015092821 小时前
Spring Boot 核心技巧与实战指南
java·数据库·spring boot
亚林瓜子21 小时前
SpringBoot中使用tess4j进行OCR(在macos上面开发)
java·spring boot·macos·ocr·lstm·tess4j
源码站~1 天前
基于SpringBoot+Vue的健身房管理系统
vue.js·spring boot·后端·毕业设计·前后端分离·管理系统·健身房
李慕婉学姐1 天前
Springboot微信小程序在线考试系统w47h61gy(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·微信小程序
陈果然DeepVersion1 天前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(五)
java·spring boot·kafka·向量数据库·大厂面试·rag·ai智能客服
FAFU_kyp1 天前
Spring Boot 邮件发送系统 - 从零到精通教程
java·网络·spring boot