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>
相关推荐
种时光的人13 小时前
无状态HTTP的“记忆”方案:Spring Boot中Cookie&Session全栈实战
服务器·spring boot·后端·http
编啊编程啊程15 小时前
gRPC从0到1系列【19】
java·spring boot·rpc·dubbo·nio
未来coding15 小时前
Spring Boot SSE 流式输出,智能体的实时响应
java·spring boot·后端
whltaoin15 小时前
Spring Boot自定义全局异常处理:从痛点到优雅实现
java·spring boot·后端
7hyya15 小时前
如何将Spring Boot 2接口改造为MCP服务,供大模型调用!
人工智能·spring boot·后端
zhangxuyu111816 小时前
Spring boot 学习记录
java·spring boot·学习
元气满满的霄霄16 小时前
Spring Boot整合缓存——Ehcache缓存!超详细!
java·spring boot·后端·缓存·intellij-idea
aloha_78916 小时前
顺丰科技java面经准备
java·开发语言·spring boot·科技·spring·spring cloud
RunningShare19 小时前
SpringBoot + MongoDB全栈实战:从架构原理到AI集成
大数据·spring boot·mongodb·架构·ai编程