併發防止重複提交

2021-09-02 17:02:29 字數 639 閱讀 4283

專案中遇到了伺服器介面重複被呼叫的情況,導致資料多次提交的問題。對於請求的重複提交,前端有一些治標的辦法,後台也有一些常規的token驗證。但是在併發的情況下,一些傳統的辦法失去了作用。

1、比如說前台js控制,如果遇到惡意攻擊,通過介面無限併發請求,資料還是會出問題。

2、session裡面存token的方式還是有問題,如果本身開啟了2個頁面,乙個頁面提交了乙個請求,此時伺服器把token改變,那另外乙個頁面獲取的token就失效了。

下面是我想到的一些辦法,高手輕拍:

由於我介面的邏輯是先查詢資料庫,看看資料是否有某種標誌,滿足則進入插入資料步驟。

導致在併發的時候大家查資料的時候都滿足,都進入了插入資料步驟,導致重複插入。

現在的辦法是利用資料庫的update對行進行加鎖,如果資料被鎖,則執行下一條資料。

比如有10條資料需要處理,2個執行緒進來,資料1被執行緒1鎖定,那執行緒2就處理資料2,以此類推。

根據這個情況,我發現可以根據這個特性對資料進行分片處理。那就是在介面邏輯本身,對資料操作的時候就開多個執行緒同時跑,反正有鎖,不用擔心會重複執行,但是效率上提高了很多。最終把每個執行緒成功的結果返回,最終彙總和原始資料比較是否一致,一致的話就處理完成,不一致找出失敗的進行提示。由於我只是對資料批量插入,不用管是否有失敗的資料要回滾之類的。

防止重複提交

在jsp頁面的form中,新增 然後在提交的action類中 suppresswarnings unchecked scope prototype controller results parentpackage default interceptorrefs value interceptorre...

防止重複提交

過濾器 repeatable 過濾器 構建可重複讀取inputstream的request submit註解 package com.medaxis.config.interceptor.annotation import j a.lang.annotation.自定義註解防止表單重複提交 inhe...

後端介面防止重複提交 確認收貨防止重複提交

1 在呼叫介面時候肯定會出現ab同事請求介面的問題,當時我在做訂單確認收貨時候就遇到了這種問題,所以我的解決辦法是加上鎖來解決,在這裡我選擇用lock 裡的reentrantlock 在使用者請求方法時候,獲取到使用者id,放入lock,這也同乙個介面如果是2個相同使用者ab同時確認收貨時候,先到先...