自定義註解實現介面限流

2022-10-08 21:51:26 字數 609 閱讀 2655

場景:限制驗證碼在單位時間內的訪問次數

實現流程:自定義乙個註解,註解內包含訪問的次數與單位時間。通過aop進行切面攔截,獲取註解內的次數和時間,獲取請求的uri與訪問者ip。組成redis的key。

使用redis將key進行原子性自增1.如果返回的是1.則設定過期時間,之後的訪問直接incr即可。但是這種方式存在問題,不是原子性的,所以需要採用原子性的設定key和過期時間。

redis官方目前set命令已經支援了set的時候指定是nx,並且設定過期時間合併成了一條指令,保證了原子性。

因此採用setifabsent()api進行設定。如果返回的true。代表首次設定key。如果已經存在,則返回false。代表key已經存在。則使用incr進行自增即可。

/**

* 處理多次請求問題,限制指定時間內只能訪問的次數

*/@aspect

@component

public class reqlimitsaspect

if (countincr > count)

try catch (throwable throwable)

return null;

}}

springboot AOP實現自定義註解新增驗證

1 新增pom.xml org.springframework.boot spring boot starter aop 2 新增註解類 自定義註解 用於驗證呼叫許可權 retention retentionpolicy.runtime target elementtype.method publi...

自定義註解 lock aop實現註解鎖

1 自定義的鎖註解 target retention retentionpolicy.runtime documented public inte ce servicelock2 aop切面 component scope aspect order 1 order越小越是最先執行,但更重要的是最先執...

自定義註解

target elementtype.field retention retentionpolicy.runtime public inte ce setvalue以上就是乙個自定義的註解,下面來進行說明。target elementtype.field 表示支援該註解的程式元素,field就是屬性...