在 Spring Boot 與 Thymeleaf 結合的 Web 應用中,防止重復提交可以采用token 機制 + 客戶端禁用按鈕
的方式實現,在高并發場景下,考慮使用 Redis 存儲 token 而非 Session。
第一步:后端實現
@Controller
public class FormController {@GetMapping("/form")public String showForm(Model model) {// 生成唯一 token 并存入 sessionString token = UUID.randomUUID().toString();model.addAttribute("token", token);return "form";}@PostMapping("/submit")public String handleSubmit(@RequestParam("token") String token, HttpSession session) {// 驗證 tokenif (!isValidToken(token, session)) {throw new RuntimeException("重復提交或無效 token");}// 處理表單數據...// 移除已使用的 tokensession.removeAttribute("token");return "success";}private boolean isValidToken(String token, HttpSession session) {// 實現 token 驗證邏輯return token != null && token.equals(session.getAttribute("token"));}
}
第二步:前端實現 (Thymeleaf)
<form th:action="@{/submit}" method="post"><!-- 其他表單字段 --><input type="hidden" th:value="${token}" name="token" /><button type="submit">提交</button>
</form>