精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

接口被惡意狂刷,怎么辦?

開發(fā) 前端
判斷是否為相同請求,使用:URI+userId+日期。即Redis的key=URI+userId+yyyyMMdd,緩存有效期為一天。很多都在代碼里有注釋了,另外強調(diào)一下,不要吐槽代碼,僅僅是演示。

 [[415967]]

下面是原本面試現(xiàn)場:

面試官:接口被惡意狂刷,怎么辦?

我:這個沒搞過(每天CRUD,真的沒搞過)

面試官:如果現(xiàn)在讓你來設計,你會怎么設計?

我:巴拉巴拉...胡扯一通

面試官:(帶著不耐煩的表情)我們還是換個話題吧

.....

為了不讓大家也和我有同樣的遭遇,今天,咱們就用一個非常簡單的方式實現(xiàn)防刷:

一個注解搞定防刷

技術點

涉及到的技術點有如下幾個:

  • 自定義注解
  • 攔截器
  • Redis的基本操作
  • Spring Boot項目

其實,非常簡單,主要的還是看業(yè)務。

本文主要內(nèi)容:

自定義注解

自定義一注解AccessLimit。

  1. import java.lang.annotation.Retention; 
  2. import java.lang.annotation.Target; 
  3.   
  4. import static java.lang.annotation.ElementType.METHOD; 
  5. import static java.lang.annotation.RetentionPolicy.RUNTIME; 
  6.   
  7. @Retention(RUNTIME) 
  8. @Target(METHOD) 
  9. public @interface AccessLimit {  
  10.     //次數(shù)上限 
  11.     int maxCount(); 
  12.     //是否需要登錄 
  13.     boolean needLogin()default false

添加Redis配置項

在配置文件中,加入Redis配置;

  1. spring.redis.database=0 
  2. spring.redis.host=127.0.0.1 
  3. spring.redis.port=6379 
  4. spring.redis.jedis.pool.max-active=100 
  5. spring.redis.jedis.pool.max-idle=100 
  6. spring.redis.jedis.pool.min-idle=10 
  7. spring.redis.jedis.pool.max-wait=1000ms 

注意,把Redis的starter在pom中引入。

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-data-redis</artifactId> 
  4.  </dependency> 

創(chuàng)建攔截器

創(chuàng)建攔截器,所有請求都進行攔截,防刷的主要內(nèi)容全部在這里。

  1. // 一堆import 這里就不貼出來了,需要的自己導入 
  2. /** 
  3.  *  處理方法上 有 AccessLimitEnum 注解的方法 
  4.  * @author java后端技術全棧 
  5.  * @date 2021/8/6 15:42 
  6.  */ 
  7. @Component  
  8. public class FangshuaInterceptor extends HandlerInterceptorAdapter { 
  9.  
  10.     @Resource 
  11.     private RedisTemplate<String,Object> redisTemplate; 
  12.  
  13.     @Override 
  14.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
  15.  
  16.         System.out.println("----FangshuaInterceptor-----"); 
  17.         //判斷請求是否屬于方法的請求 
  18.         if (handler instanceof HandlerMethod) { 
  19.  
  20.             HandlerMethod hm = (HandlerMethod) handler; 
  21.  
  22.             //檢查方法上室友有AccessLimit注解 
  23.             AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class); 
  24.             if (accessLimit == null) { 
  25.                 return true
  26.             } 
  27.             //獲取注解中的參數(shù), 
  28.             int maxCount = accessLimit.maxCount(); 
  29.             boolean login = accessLimit.needLogin(); 
  30.             String key = request.getRequestURI(); 
  31.             //防刷=同一個請求路徑+同一個用戶+當天 
  32.             //如果需要登錄 
  33.             if (login) { 
  34.                 //可以充session中獲取user相關信息 
  35.                 //這里的userId暫時寫死, 
  36.                 Long userId = 101L; 
  37.                 String currentDay = format(new Date(), "yyyyMMdd"); 
  38.                 key += currentDay + userId; 
  39.             }else
  40.                 //可以根據(jù)用戶使用的ip+日期進行判斷 
  41.             } 
  42.  
  43.             //從redis中獲取用戶訪問的次數(shù) 
  44.             Object countCache = redisTemplate.opsForValue().get(key); 
  45.             if (countCache == null) { 
  46.                 //第一次訪問,有效期為一天 
  47.                 //時間單位自行定義 
  48.                 redisTemplate.opsForValue().set(key,1,86400, TimeUnit.SECONDS); 
  49.             } else
  50.                 Integer count = (Integer)countCache; 
  51.                 if (count < maxCount) { 
  52.                     //加1 
  53.                     count++; 
  54.                     //也可以使用increment(key)方法 
  55.                     redisTemplate.opsForValue().set(key,count); 
  56.                 } else { 
  57.                     //超出訪問次數(shù) 
  58.                     render(response, "訪問次數(shù)已達上限!"); 
  59.                     return false
  60.                 } 
  61.             } 
  62.         } 
  63.         return true
  64.     } 
  65.     //僅僅是為了演示哈 
  66.     private void render(HttpServletResponse response, String msg) throws Exception { 
  67.         response.setContentType("application/json;charset=UTF-8"); 
  68.         OutputStream out = response.getOutputStream(); 
  69.         out.write(msg.getBytes("UTF-8")); 
  70.         out.flush(); 
  71.         out.close(); 
  72.     } 
  73.     //日期格式 
  74.     public static String format(Date date, String formatString) { 
  75.         if (formatString == null) { 
  76.             formatString = DATE_TIME_FORMAT; 
  77.         } 
  78.         DateFormat dd = new SimpleDateFormat(formatString); 
  79.         return dd.format(date); 
  80.     } 

注意

判斷是否為相同請求,使用:URI+userId+日期。即Redis的key=URI+userId+yyyyMMdd,緩存有效期為一天。

很多都在代碼里有注釋了,另外強調(diào)一下,不要吐槽代碼,僅僅是演示。

注冊攔截器

盡管上面我們已經(jīng)自定義并實現(xiàn)好了攔截器,但還需要我們手動注冊。

  1. import com.example.demo.ExceptionHander.FangshuaInterceptor; 
  2. import org.springframework.beans.factory.annotation.Autowired; 
  3. import org.springframework.context.annotation.Configuration; 
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
  6.  
  7. @Configuration 
  8. public class WebConfig extends WebMvcConfigurerAdapter { 
  9.   
  10.     @Autowired 
  11.     private FangshuaInterceptor interceptor; 
  12.   
  13.   
  14.     @Override 
  15.     public void addInterceptors(InterceptorRegistry registry) { 
  16.         registry.addInterceptor(interceptor); 
  17.     } 

這樣我們的注解就正式注冊到攔截器鏈中了,后面項目中才會有效。

使用注解

前面的準備都搞定了,現(xiàn)在來具體使用。

首先,我們創(chuàng)建一個簡單的controller,然后,在方法上加上我們自定義的注解AccessLimit,就可以實現(xiàn)接口防刷了。

  1. import com.example.demo.result.Result; 
  2. import org.springframework.stereotype.Controller; 
  3. import org.springframework.web.bind.annotation.RequestMapping; 
  4. import org.springframework.web.bind.annotation.ResponseBody; 
  5.   
  6. @Controller 
  7. public class FangshuaController { 
  8.     //具體請求次數(shù)由具體業(yè)務決定,以及是否需要登錄 
  9.     @AccessLimit(maxCount=5, needLogin=true
  10.     @RequestMapping("/fangshua"
  11.     @ResponseBody 
  12.     public Object fangshua(){ 
  13.         return "請求成功"
  14.   
  15.     } 

測試,瀏覽器頁面上訪問:http://localhost:8080/fangshua

前面4次返回的是:請求成功

超過4次后變成:訪問次數(shù)已達上限!

一個注解就搞定了,是不是 so easy !!!

總結

關于接口防刷,如果在面試中被問到,至少還是能說個123了。也建議大家手動試試,自己搞出來了更帶勁兒。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2024-08-06 08:08:14

2024-02-19 00:00:00

接口圖形驗證碼

2016-08-08 15:03:54

騰訊云電商騰訊云天御系統(tǒng)

2025-05-12 09:30:51

2021-10-01 00:12:12

Redis分布式

2024-03-13 13:25:09

Redis分布式鎖

2011-06-30 17:58:30

網(wǎng)站被K

2020-07-10 08:46:26

HTTPS證書劫持網(wǎng)絡協(xié)議

2025-06-12 08:21:22

2015-03-31 15:33:55

2012-11-27 10:41:33

2021-04-13 10:41:25

Redis內(nèi)存數(shù)據(jù)庫

2018-11-27 09:28:41

API攻擊惡意

2011-06-27 15:42:23

降權SEO

2017-05-11 16:54:16

2017-12-08 11:14:21

2019-02-18 15:45:24

CPU頻率溫度

2015-03-24 16:58:18

iPhone6

2022-09-05 09:02:01

服務器CPU服務

2017-03-13 15:25:51

Windows 7Windows端口占用
點贊
收藏

51CTO技術棧公眾號

中国色在线观看另类| 中文日韩在线| 日韩精品中文字幕一区二区三区 | 欧美中在线观看| 婷婷色一区二区三区| 欧美 日韩 国产在线观看| 91tv国产成人福利| 精品成人免费| 中文亚洲视频在线| 中文字幕18页| 色综合视频一区二区三区日韩| 一区二区成人在线视频| 青青草原亚洲| 精品久久久免费视频| 三级在线观看一区二区| 久久99精品久久久久久琪琪| 天天躁日日躁aaaxxⅹ| 青青国产精品| 色婷婷综合久色| 污污污污污污www网站免费| 久久天堂电影| 国产91综合网| 国产欧美一区二区三区久久人妖 | 午夜精品免费看| 日本不卡1234视频| 亚洲精品亚洲人成人网| 色999日韩自偷自拍美女| 肥臀熟女一区二区三区| 国产在线播精品第三| 国产极品精品在线观看| 日本网站在线播放| 欧美午夜视频| 久久亚洲国产精品成人av秋霞| 91成人破解版| 综合亚洲自拍| 日韩av网站导航| 亚洲国产精品第一页| 国产一区二区三区免费观看在线 | 婷婷丁香花五月天| 国产精品一区二区久久不卡| 91精品国产综合久久久久久久久| 91在线视频免费播放| av不卡免费看| 欧美国产亚洲精品久久久8v| 黑鬼狂亚洲人videos| 98精品久久久久久久| 永久免费看mv网站入口亚洲| 无码熟妇人妻av| 亚洲bt欧美bt精品777| 精品91自产拍在线观看一区| 中文字幕乱码在线人视频| 亚洲国产一区二区久久| 欧美日韩另类国产亚洲欧美一级| 日韩精品你懂的| 国产精品天堂蜜av在线播放| 欧美性猛交xxxx黑人交| 丰满少妇在线观看| 黄色精品视频| 欧美美女一区二区三区| 亚洲天堂国产视频| 欧美啪啪网站| 欧美妇女性影城| 日本黄色的视频| 婷婷激情成人| 91精品国产色综合久久不卡蜜臀| 999这里有精品| 亚洲91在线| 日韩一区二区三区观看| 最新中文字幕日本| 麻豆精品av| 亚洲精品网站在线播放gif| 97人妻天天摸天天爽天天| 亚洲欧美成人vr| 亚洲午夜精品久久久久久久久久久久 | 姬川优奈av一区二区在线电影| 在线视频国内自拍亚洲视频| 九九精品久久久| 99精品美女视频在线观看热舞| 欧美一区二区三区免费视频| 久久久久亚洲无码| av资源久久| 久久亚洲影音av资源网| 欧美精品99久久久| 亚洲欧美日韩精品一区二区| 国产精品免费福利| 国产sm主人调教女m视频| 成人免费观看视频| 日韩免费电影一区二区| av毛片在线| 欧美日韩精品在线观看| 在线免费视频一区| 国产精品香蕉| 中文字幕一区日韩电影| 久久网中文字幕| 丝袜亚洲另类欧美综合| 91九色偷拍| 可以在线观看的av网站| 亚洲狠狠丁香婷婷综合久久久| www国产精品内射老熟女| 日韩电影精品| 日韩成人xxxx| 欧美精品久久久久久久久46p| 在线精品亚洲| 91久久精品一区| 欧美少妇另类| 亚洲大片在线观看| 国产精品一区二区小说| 欧美亚洲国产日韩| 久久偷看各类女兵18女厕嘘嘘| 性无码专区无码| 国产精品一区二区三区乱码| 亚洲成人精品电影在线观看| 精品极品在线| 日韩视频不卡中文| 中国1级黄色片| 亚洲一区欧美激情| 超碰97在线资源| 自拍视频在线网| 精品女同一区二区三区在线播放| 天天操夜夜操很很操| 欧美一级精品| 日本中文字幕久久看| 国产91绿帽单男绿奴| 中文字幕亚洲一区二区av在线| 国内外成人激情视频| 91免费精品国偷自产在线在线 | 亚洲性图自拍| 欧美日韩不卡在线| 中文字幕免费视频| 国产亚洲精品自拍| 国产精品一区二区不卡视频| av网址在线播放| 欧美日韩dvd在线观看| 久久久久亚洲av无码专区桃色| 亚洲网站啪啪| 成人在线免费观看一区| 粗大黑人巨茎大战欧美成人| 欧美日本不卡视频| 精品一区二区三区蜜桃在线| 亚洲一区黄色| 久久国产精品久久| 欧美男男tv网站在线播放| 精品国产91亚洲一区二区三区婷婷 | 亚洲欧美一区二区视频| 亚洲人辣妹窥探嘘嘘| 成人久久综合| 国产欧美精品日韩精品| av电影在线网| 欧美日韩国产综合草草| 99热6这里只有精品| 美日韩一区二区三区| 亚洲一区二区不卡视频| xxx国产在线观看| 亚洲婷婷丁香| 国产suv精品一区二区| 免费在线稳定资源站| 色婷婷综合久久| 中文字幕成人动漫| 久久精品女人| 日韩欧美视频第二区| 成人涩涩视频| 久久精品福利视频| 国产免费黄色录像| 亚洲精品成a人| 99久久久无码国产精品性波多 | 国产又黄又大又爽| 中文字幕一区二区三区四区| 97人人模人人爽人人澡| 伊人久久亚洲热| 久久亚裔精品欧美| 日韩欧美2区| 久久亚洲影音av资源网| 亚洲欧美另类日韩| 欧美性猛交xxxx免费看| 久久亚洲AV无码专区成人国产| 免费成人在线视频观看| 久久久天堂国产精品| 国产精品免费无码| 亚洲精品极品少妇16p| 亚洲自拍偷拍福利| h片在线观看下载| 亚洲视频视频在线| 国产视频一二三四区| 亚洲成av人片| 国产精品一二三区在线观看| 国产在线精品视频| 国产精品又粗又长| 日韩综合一区| 国产成人精品日本亚洲11| 欧美电影免费看| 乱亲女秽乱长久久久| 视频一区二区免费| 欧美日韩久久不卡| 欧美成人一二三区| 欧美激情中文字幕一区二区| 亚洲av无一区二区三区久久| 久久精品女人| 狠狠噜天天噜日日噜| 米奇777超碰欧美日韩亚洲| 成人av在线网址| 碰碰在线视频| 伦理中文字幕亚洲| 国产乱视频在线观看| 精品久久一二三区| 中文字幕在线播出| 精品欧美激情精品一区| 极品盗摄国产盗摄合集| 久久久五月婷婷| 精人妻一区二区三区| 日本欧美韩国一区三区| 国产美女主播在线播放| 999成人精品视频线3| 欧美一区二区三区精美影视| 日韩激情欧美| 国产欧美最新羞羞视频在线观看| 欧美伦理91| 欧美激情第1页| 激情影院在线观看| 亚洲视频在线看| 天天干天天插天天操| 91精品国产综合久久小美女| 国产男人搡女人免费视频| 精品久久久久久久久中文字幕 | 亚洲18色成人| 久久高清内射无套| 欧美激情一区在线观看| 精品人妻少妇嫩草av无码| 丰满白嫩尤物一区二区| 婷婷中文字幕在线观看| 麻豆freexxxx性91精品| 久久精品午夜福利| 国产亚洲一级| 国产av天堂无码一区二区三区| 欧美在线三区| 成人国产一区二区三区| 亚洲精品午夜av福利久久蜜桃| 亚洲一区二区免费视频软件合集 | 成人爱爱电影网址| 国产调教打屁股xxxx网站| 精品一区二区三区av| 91福利国产成人精品播放| 日韩中文字幕麻豆| 成人3d动漫一区二区三区| 久久狠狠一本精品综合网| 97视频在线免费播放| 先锋影音久久| 国产精品欧美激情在线观看| 久久精品天堂| 亚洲人辣妹窥探嘘嘘| 美女一区二区视频| 182午夜在线观看| 久草中文综合在线| www,av在线| 国产激情一区二区三区四区| 男人的天堂免费| 成人黄色网址在线观看| 波多野结衣加勒比| wwwwxxxxx欧美| 欧美做受高潮6| 国产精品区一区二区三区| 成年人网站在线观看视频| 亚洲视频香蕉人妖| 久久视频免费看| 欧美性猛交丰臀xxxxx网站| 免费在线观看av的网站| 欧美二区在线观看| 亚洲国产精品欧美久久| 亚洲国产精品视频在线观看| 色播色播色播色播色播在线 | 欧美日韩激情在线| 国产夫妻性生活视频| 亚洲精品成人免费| 激情小视频在线| 久久国产一区二区三区| 日本乱理伦在线| 欧洲成人免费视频| 懂色aⅴ精品一区二区三区| 亚洲自拍偷拍色片视频| 欧美wwwwww| 手机成人在线| 欧美午夜国产| wwwwww.色| 国产精品一区二区久久不卡| 素人fc2av清纯18岁| 中文字幕在线播放不卡一区| 日本三级网站在线观看| 欧美在线|欧美| 亚洲黄色精品视频| 国产一区二区三区精品久久久| www在线免费观看视频| 97视频在线观看免费高清完整版在线观看| 日韩电影大全网站| 亚洲aⅴ男人的天堂在线观看| 欧美jizz19性欧美| 性生活免费观看视频| 夜夜嗨一区二区| 在线免费观看av网| 337p粉嫩大胆色噜噜噜噜亚洲| 中文国语毛片高清视频| 欧美日韩一区二区精品| 国产精品综合在线| 亚洲欧美一区二区三区四区| 在线中文字幕电影| 国产精品福利网站| 成人免费在线电影网| 中文字幕欧美日韩一区二区三区 | 校园春色 亚洲色图| 成人性视频免费网站| 貂蝉被到爽流白浆在线观看| 欧美日韩视频在线| 亚洲国产精品国自产拍久久| 一区二区三区四区精品| 女人高潮被爽到呻吟在线观看| 5566中文字幕一区二区| 精品欧美久久| 欧美三级在线观看视频| 国产精品99久久久久久似苏梦涵| 中文字幕免费高清| 高潮白浆女日韩av免费看| 精品国产一级片| 久久精品91久久香蕉加勒比 | 一本一道久久a久久精品蜜桃| 白嫩少妇丰满一区二区| av电影在线观看一区| 欧美人与禽zozzo禽性配| 8x8x8国产精品| 日本欧美在线视频免费观看| 国产精品www色诱视频| 丝袜美腿综合| 日韩欧美不卡在线| 国产1区2区3区精品美女| 成人在线观看免费完整| 欧美精品一卡二卡| 在线观看的av| 国产精品人成电影| sdde在线播放一区二区| 欧美一级黄色影院| 2019国产精品| 亚洲视频 欧美视频| 亚洲国产小视频| 国产ktv在线视频| 国产一级特黄a大片99| 国内久久精品| 中文字幕天堂av| 亚洲电影一区二区| 深爱五月激情五月| 欧美亚洲另类制服自拍| 日韩最新在线| 北条麻妃在线一区| 久久精品一区蜜桃臀影院| 97人妻一区二区精品视频| 永久555www成人免费| 国产一区二区三区四区五区3d | 国产精品va在线观看视色| 91欧美精品成人综合在线观看| 希岛爱理av一区二区三区| 99热这里只有精品2| 一区二区三区日韩欧美| 六月丁香综合网| 777国产偷窥盗摄精品视频| 丝袜美腿一区二区三区动态图| 午夜视频在线瓜伦| 国产精品久久久99| 性色av蜜臀av| 91av在线播放| 精品精品久久| 亚洲高清在线不卡| 亚洲成a天堂v人片| 可以免费看污视频的网站在线| 国产精品免费在线免费| 综合久久久久| 亚洲午夜久久久久久久久| 欧美日韩国产页| 1024免费在线视频| 99re在线播放| 性色一区二区三区| 免费一级suv好看的国产网站| 欧美一级在线观看| 丝袜诱惑一区二区| 一区高清视频| 99久久夜色精品国产网站| 亚洲无码精品一区二区三区| 久久久国产视频91| 大桥未久女教师av一区二区| 成人在线激情网| 亚洲视频在线一区观看| 神马久久久久久久久久| 国产有码在线一区二区视频| 亚洲国产精品一区| 亚洲欧美另类日本| 亚洲国产精品久久精品怡红院 | 日韩中文字幕亚洲一区二区va在线| 人与动物性xxxx| 亚洲国产小视频| 91麻豆精品| av网址在线观看免费| 亚洲另类中文字| 国产免费av在线| 国产欧美日韩综合精品二区| 日本不卡中文字幕|