在傳統的web專案中,防止重複提交,通常做法是:後端生成乙個唯一的提交令牌(uuid),並儲存在服務端。頁面提交請求攜帶這個提交令牌,後端驗證並在第一次驗證後刪除該令牌,保證提交請求的唯一性。
上述的思路其實沒有問題的,但是需要前後端都稍加改動,如果在業務開發完在加這個的話,改動量未免有些大了,本節的實現方案無需前端配合,純後端處理。
思路
1、自定義註解 @norepeatsubmit 標記所有controller中的提交請求
2、通過aop 對所有標記了 @norepeatsubmit 的方法攔截
3、在業務方法執行前,獲取當前使用者的 token(或者jsessionid)+ 當前請求位址,作為乙個唯一 key,去獲取 redis 分布式鎖(如果此時併發獲取,只有乙個執行緒會成功獲取鎖)
4、業務方法執行後,釋放鎖
這裡只貼出 aop 類和測試類
多執行緒測試
測試**如下,模擬十個請求併發同時提交
成功防止重複提交,控制台日誌如下,可以看到十個執行緒的啟動時間幾乎同時發起,只有乙個請求提交成功了
(完)
https能防重放嗎 HTTPS如何防止重放攻擊?
感謝應邀回到本行業的問題。在回答這個問題之前我感覺我們因該先了解乙個https。https 是以安全為目標的http通道,簡單講是http的安全版,即http下加入ssl層,https的安全基礎是ssl,因此加密的詳細內容就需要ssl。工作流程為 第一步 客戶使用https的url訪問web伺服器,...
springboot防止表單重複提交
最近負責乙個後台框架的搭建,使用的是springboot redis jwt 一直哐哐寫,沒有想到表單重複提交的問題,晚上想結構的時候突然想起來。上 引入依賴 使用aop做攔截 springboot org.springframework.boot spring boot starter aop s...
Spring Boot 使用 AOP 防止重複提交
在傳統的web專案中,防止重複提交,通常做法是 後端生成乙個唯一的提交令牌 uuid 並儲存在服務端。頁面提交請求攜帶這個提交令牌,後端驗證並在第一次驗證後刪除該令牌,保證提交請求的唯一性。上述的思路其實沒有問題的,但是需要前後端都稍加改動,如果在業務開發完在加這個的話,改動量未免有些大了,本節的實...