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>
相关推荐
ponnylv1 小时前
深入剖析Spring Boot启动流程
java·开发语言·spring boot·spring
cyforkk2 小时前
Spring Boot @RestController 注解详解
java·spring boot·后端
叫我阿柒啊3 小时前
从Java全栈到前端框架:一次真实面试的深度复盘
java·spring boot·typescript·vue·database·testing·microservices
愿你天黑有灯下雨有伞6 小时前
一种基于注解与AOP的Spring Boot接口限流防刷方案
java·spring boot·后端
知识浅谈7 小时前
Redis哨兵模式在Spring Boot项目中的使用与实践
spring boot·redis·bootstrap
lozhyf7 小时前
能发弹幕的简单视频网站
java·spring boot·后端
十八旬8 小时前
苍穹外卖项目实战(day-5完整版)-记录实战教程及问题的解决方法
java·开发语言·spring boot·redis·mysql
chenrui3108 小时前
Spring Boot 和 Spring Cloud: 区别与联系
spring boot·后端·spring cloud
邂逅星河浪漫8 小时前
Spring Boot常用注解-详细解析+示例
java·spring boot·后端·注解
weixin_456904279 小时前
基于Spring Boot + MyBatis的用户管理系统配置
spring boot·后端·mybatis