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>
相关推荐
>no problem<1 天前
基于cola5.0的基础设施层的多数据库切换方案思路
数据库·spring boot·mybatisplus·cola5.0·数据库迁移适配
心之伊始1 天前
Java 后端接入大模型:从 Token、并发到推理成本的完整估算方法
java·spring boot·性能优化·大模型·llm
Dr_eamboat1 天前
SpringBoot策略模式+工厂模式实战解析
linux·spring boot·策略模式
☆cwlulu1 天前
Linux系统调用与C库I/O的底层奥秘
java·spring boot·spring
柏舟飞流1 天前
Spring Boot 深入实践指南:从入门到工程化落地
spring boot·后端·firefox
橘子海全栈攻城狮1 天前
【最新源码】鸟博士微信小程序 023
spring boot·后端·web安全·微信小程序·小程序
河阿里1 天前
Spring Boot:整合Quartz集群部署指南
java·spring boot·后端
砍材农夫1 天前
物联网实战:Spring Boot MQTT | 模拟器Paho客户端拆解高性能
java·javascript·spring boot·后端·物联网·struts
biubiubiu07061 天前
SpringBoot 3.5.4 整合Quartz 定时任务
java·spring boot·spring
可乐ea1 天前
【知识获取与分享社区项目 | 项目日记第 19 天】基于 Elasticsearch 实现关键词检索与业务权重排序
java·大数据·spring boot·mysql·elasticsearch·搜索引擎·全文检索