防止API重複請求(集群環境)

2021-09-27 11:03:35 字數 1970 閱讀 8816

背景

先了解一下需求詳情:在專案的開發中,安全這塊是必不可少的,今天的問題是:防止api重複請求。為什麼要防止api重複請求呢?就是為了防止一些惡意的請求!

實現思路

使用以上三個引數拼接的key作為去判斷是否重複請求由於專案是基於集群的,所以使用redis儲存key,而且redis的特性,key可以設定在規定時間內自動刪除。這裡的這個規定時間,就是api在規定時間內不能重複提交。以上就是個人的實現思路,下面一步一步來剖析。

剖析

@target(elementtype.method)

// 如果redis中有這個key, 則url視為重複請求

if (opsforvalue.get(key) == null) else

} catch (throwable e)

}/**

* 獲取請求引數

* @param pjp

* @return

*/private string getrequestparasjsonstring(proceedingjoinpoint pjp)

}return jacksonserializer.tojsonstring(args);

}}

切面貼出主要邏輯**,就是獲取request中相關的資訊,然後再拼接成乙個key;判斷在redis是否存在,不存在就新增並設定規定時間後自動移除,存在就是重複請求 。

**總結與拓展

reference

集群環境下如何防止定時任務重複執行?

起因 最近做專案是遇到這樣乙個問題 系統需要在每天的16 00向一些符合特定條件的使用者傳送乙份郵件,傳送成功後修改掉資料庫中對應資料的標誌位。本來是沒有問題的,但後來系統被部署到了集群環境下,導致每天會向這些使用者傳送多次同樣的資料,遭到了客戶的抱怨。解決 下面來介紹一下處理這種問題的解決辦法 1...

集群環境下如何防止定時任務重複執行?

起因 最近做專案是遇到這樣乙個問題 系統需要在每天的16 00向一些符合特定條件的使用者傳送乙份郵件,傳送成功後修改掉資料庫中對應資料的標誌位。本來是沒有問題的,但後來系統被部署到了集群環境下,導致每天會向這些使用者傳送多次同樣的資料,遭到了客戶的抱怨。解決 下面來介紹一下處理這種問題的解決辦法 1...

vue防止介面重複請求實現方法

場景 通常專案中在每個請求介面的方法中新增乙個請求鎖,防止重複請求,但是這樣比較low,比較冗餘,於是新增乙個全域性的方法,就不用每次請求界面前手動編寫請求鎖,減少編碼和工作量。方法 在axios的請求和響應 裡邊使用axios的canceltoken方法即可實現。例項 封裝axios的請求,返回重...