日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

@requirespermissions注解是什么意思_如何基于spring开发自定义注解实现对接口访问频次限制?...

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @requirespermissions注解是什么意思_如何基于spring开发自定义注解实现对接口访问频次限制?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

做JavaWeb的開發的同學們都應該遇到過,客戶要求某個接口進行頻次的限制,如每秒并發10個,或者短信驗證碼發送場景,60秒內只允許發送一次。

通常開發的小伙伴們肯定是拿到以上需求在接口邏輯里進行實現,噼里啪啦一頓輸出,OK搞定了,很簡單。的確,這些需求比較簡單,但是,有沒有想過,這種頻次限制其實是和業務耦合度不高,能不能統一封裝,在業務需要的時候直接設置就行了呢?

答案是肯定的。自定義注解來實現就非常的方便,對你的業務接口增加自定義注解,無需修改業務代碼即可快速按需完成想要的功能。

第一步:當然是定義一個自定義注解,如RateLimit

定義一個自定義注解RateLimit應用在方法或者類上,并定義相關關鍵字段,參數Key、頻次數、時間、錯誤提示等。意思就是,在多少時間內,根據參數Key獲取的值為判斷依據,允許多少頻次數的訪問,如果超過,那么提示錯誤提示語,并拒絕訪問。

第二步:實現HandlerInterceptor自定義一個攔截器

在攔截器里重寫preHandle,將Object handler轉換成HandlerMethod類型傳遞給自定義的securityManager處理,小伙伴也可以在這個地方直接實現,直接實現代碼就不是顯得那么高大上了。

第三步:核心處理邏輯

核心處理方法為handle方法,專門處理類RateLimitHandler。該方法,獲取到方法上的注解類RateLimit,并獲取到注解類里的關鍵信息:key()、fromHead()。fromHead為true表示從請求頭根據key值獲取對應的value值作為唯一標識uuid,否則直接從請求參數里根據key獲取唯一標識。獲取唯一標識后,調用validateRate方法進行校驗是否超過頻次,傳入uuid,時間、時間單元,當前請求對象。

校驗方法,首先根據uuid生成一個內部key,用于區分不同業務,cacheHandler是一個緩存實現,本例中,cacheHandler其實注入的是redis實例,也可以是內存實例。調用cacheHandler自增方法返回一個值,為什么要用自增,是因為考慮并發情況,不能先get再set。如果為1,表示第一次訪問,設置一個失效時間,即注解定義的多少時間內,在這個時間過后,自動失效。

最后判斷次數是否超過注解類定義的頻次數,如果超過,返回false,否則,返回true。到此,自定義注解的實現就結束了。大家疑惑,如果使用起來呢。

第四步:使用,如:60秒內,只允許請求一次(哈哈哈短信驗證碼使用場景)

OK,就是這么簡單,后續有其他相似的業務只需加這個注解,修改不同的時間、限制次數就可以。

總結

以上是生活随笔為你收集整理的@requirespermissions注解是什么意思_如何基于spring开发自定义注解实现对接口访问频次限制?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。