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>
相关推荐
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
qq_124987075311 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_12 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
2301_8187320612 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
汤姆yu15 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶15 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip16 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide17 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
figo10tf17 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva17 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端