Restful api 防止重複提交

2021-09-26 10:00:15 字數 724 閱讀 7200

當前很多**是前後分離的,前端(android,iso,h5)通過restful api 呼叫 後端伺服器,這就存在乙個問題,對於建立操作,比如購買某個商品,如果由於某種原因,手抖,控制項bug,網路錯誤,可能導致一次操作實際上購買了多次同乙個產品。所以,我們要考慮防止重複提交。這個重複提交我們只限定於建立操作,對於修改和刪除操作,原則上是冪等的,不用擔心,查詢操作更不用擔心重複操作。

方案一,前端在提交時候生成乙個基於時間的sequence,將這個引數傳到後端,後端根據uripath+userid+sequence作為key,採用redis分布式鎖,setnx,防止重複提交

方案二,前端不用傳遞sequence,後端根據請求的payload和其他引數來確定唯一,uripath+userid+md5(jsonstring(所有引數))作為key,用redis分布式鎖

具體實現:

對於方案一,防止重複提交交給了前端控制,sequence的生成可以是時間戳。後端可以做在servlet filter 中或者在restful 框架的filter中比如resteasy 的containerrequestfilter中

對於第二種方案,防止重複提交完全由後端控制,前端無感,不能做在filter中,因為request payload只能被消費一次。可以用spring aop來實現,對resource method 做aop攔截。

優劣:基於我們的目的,是為了防止重複提交,第二種方案能夠更徹底的防止重複提交,並且易於控制。

原文:

Spring Boot 使用 AOP 防止重複提交

在傳統的web專案中,防止重複提交,通常做法是 後端生成乙個唯一的提交令牌 uuid 並儲存在服務端。頁面提交請求攜帶這個提交令牌,後端驗證並在第一次驗證後刪除該令牌,保證提交請求的唯一性。上述的思路其實沒有問題的,但是需要前後端都稍加改動,如果在業務開發完在加這個的話,改動量未免有些大了,本節的實...

Struts2中使用Token防止重複提交資料

如果防止表單的重複提交,可以在表單中加入 username password 然後在action配置中配置重複提交後跳轉頁面等 tokensuccess.jsp tokenfail.jsp token機制的原理是 當客戶端要訪問表單頁面時候向伺服器中傳送請求,伺服器會生成乙個隨機數放置到sessio...

Struts2學習10 防止表單的重複提

一 簡介 struts2使用 token 來檢查表單是否重複提交,採用的是同步令牌的方式。同步令牌方式 伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在當前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答 送給客戶端之前,將會產生乙個新的令牌,該令牌除傳給客戶端以外,也...