背景
先了解一下需求詳情:在專案的開發中,安全這塊是必不可少的,今天的問題是:防止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的請求,返回重...