国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Spring Cloud Gateway通過全局過濾器實(shí)現(xiàn)接口防刷

開發(fā) 前端
通過某種機(jī)制實(shí)現(xiàn)對系統(tǒng)中的某些接口在規(guī)定的時間段內(nèi)只能讓某個具體的客戶端訪問指定次數(shù),超出次數(shù),就不讓訪問了。

環(huán)境:Spring Boot2.7.12 + Spring Cloud2021.0.7

1 概念

通過某種機(jī)制實(shí)現(xiàn)對系統(tǒng)中的某些接口在規(guī)定的時間段內(nèi)只能讓某個具體的客戶端訪問指定次數(shù),超出次數(shù),就不讓訪問了。等待指定的時間到期后又能繼續(xù)訪問接口;這里需要注意的是是控制到每一個具體的接口上,所以必須確定兩個要素:

  1. 客戶端是誰
  2. 訪問的接口

2 實(shí)現(xiàn)原理

可以通過2種方式實(shí)現(xiàn):

  1. 通過網(wǎng)關(guān)
    可以控制到所有的服務(wù)
  2. 通過AOP
    該方案只能針對具體的每一個服務(wù),代碼重復(fù),如果通過

本篇文章我們通過網(wǎng)關(guān)實(shí)現(xiàn),那接下來就是考慮上該如何去記錄當(dāng)前客戶端訪問的具體接口在指定的時間內(nèi)已經(jīng)訪問了多少次了?通過兩種方式:

  1. JVM層
    該種實(shí)現(xiàn)方式,你需要自己實(shí)現(xiàn)時效性的檢查,實(shí)現(xiàn)麻煩
  2. 通過Redis
    Redis本身就可以對Key設(shè)置時效性,所以非常的方便。本文通過Redis實(shí)現(xiàn)。

通過 Redis 記錄訪問請求的次數(shù),每次訪問都進(jìn)行遞減,如果次數(shù)小于0就返回錯誤信息,當(dāng)?shù)搅酥付ǖ臅r效則Redis會對過期的key進(jìn)行自動刪除。

3 代碼實(shí)現(xiàn)

Redis配置

spring:
  redis:
    host: localhost
    port: 6379
    password: 123123
    database: 8
    lettuce:
      pool:
        maxActive: 8
        maxIdle: 100
        minIdle: 10
        maxWait: -1

定義全局過濾器

@Component
public class BrushProofFilter implements GlobalFilter, Ordered {


  private final ReactiveStringRedisTemplate reactiveStringRedisTemplate ;
  
  public BrushProofFilter(ReactiveStringRedisTemplate reactiveStringRedisTemplate) {
    this.reactiveStringRedisTemplate = reactiveStringRedisTemplate ;
  }
  
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    // 獲取客戶端的請求ip
    InetAddress address = exchange.getRequest().getRemoteAddress().getAddress();
    // 獲取請求的URI
    String path = exchange.getRequest().getPath().toString() ;
    // 將其組合為Redis中的Key
    String key = ("ratelimiter:" + address + ":" + path) ;
    // 通過拋出異常的方式終止序列,然后通過自定義的WebExceptionHandler處理異常信息 
    return this.reactiveStringRedisTemplate.opsForValue()
        // 這里固定設(shè)置每30s,訪問10次
        .setIfAbsent(key, "10", Duration.ofSeconds(30))
        .flatMap(exist -> {
          return this.reactiveStringRedisTemplate.opsForValue().decrement(key) ;
        })
        .doOnNext(num -> {
          if (num < 0) {
            throw new BrushProofException("你訪問太快了") ;
          }
        })
        .then(chain.filter(exchange)) ;
  }


  @Override
  public int getOrder() {
    return -2 ;
  }


}

自定義異常

public class BrushProofException extends RuntimeException {


  private static final long serialVersionUID = 1L;
  
  public BrushProofException(String message) {
    super(message) ;
  }
  
}

自定義異常處理句柄

@Component
public class RatelimiterWebExceptionHandler implements WebExceptionHandler {


  @Override
  public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
    if (ex instanceof RatelimiterException re) {
      ServerHttpResponse response = exchange.getResponse() ;
      response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR) ;
      response.getHeaders().add("Content-Type", "text/html;charset=utf8") ;
      // 直接輸出了,異常不進(jìn)行傳遞
      return response.writeWith(Mono.just(response.bufferFactory().wrap(("你訪問太快了").getBytes()))) ;
    }
    // 如果是其它異常,則將異常繼續(xù)向下傳遞
    return Mono.error(ex) ;
  }


}

訪問測試

圖片圖片

因?yàn)槲疫@里沒有這個接口,所以返回的是降級接口,也算是正常

當(dāng)超過10次后:

Redis

圖片圖片

以客戶端請求ip + path作為key

圖片圖片


責(zé)任編輯:武曉燕 來源: 實(shí)戰(zhàn)案例錦集
相關(guān)推薦

2023-01-26 01:41:27

核心全局過濾器

2023-04-14 09:01:25

2021-01-14 08:13:39

Spring Clou應(yīng)用內(nèi)置過濾器

2024-04-03 08:08:15

謂詞網(wǎng)關(guān)開發(fā)

2017-04-12 14:43:01

Spring ClouZuul過濾器

2023-02-15 08:12:19

http超時過濾器

2017-05-04 22:30:17

Zuul過濾器微服務(wù)

2024-01-05 09:04:35

隆過濾器數(shù)據(jù)結(jié)構(gòu)哈希函數(shù)

2024-11-04 08:45:48

布隆過濾器元數(shù)據(jù)指紋值

2017-09-15 23:29:53

Spring Clou微服務(wù)架構(gòu)過濾器

2021-07-05 15:22:03

Servlet過濾器客戶端

2024-10-09 15:54:38

布隆過濾器函數(shù)

2009-09-29 13:55:23

Hibernate設(shè)置

2009-07-14 09:09:08

Swing模型過濾器

2009-07-08 15:30:56

Servlet過濾器

2011-06-29 16:14:59

Qt 事件 過濾器

2009-07-08 16:07:04

Servlet過濾器配

2022-02-16 23:58:41

Spring過濾器驗(yàn)證碼

2025-10-22 10:09:03

2023-02-20 10:13:00

灰度發(fā)布實(shí)現(xiàn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

午夜小视频在线观看| 日韩视频一区二区三区四区| 中文久久乱码一区二区| 在线观看成人av| 亚洲精品影视| 91在线视频精品| 色棕色天天综合网| 欧美成人免费观看| 宅男噜噜噜66国产精品免费| 性xxxxfjsxxxxx欧美| 日韩欧美主播在线| 超碰在线免费看| 亚洲视频你懂的| 国产成人自拍视频在线观看| 特黄特黄的视频| 综合av第一页| a视频免费看| 一卡二卡三卡日韩欧美| 国产区一区二区三区| 欧美激情精品久久久六区热门| 国产91ⅴ在线精品免费观看| 欧美天堂社区| 欧美专区中文字幕| 四虎成人av| 国产视频不卡| 日本午夜精品视频在线观看| 亚洲一区精彩视频| 粉嫩蜜臀av国产精品网站| 91视频最新入口| 爽成人777777婷婷| 18成人免费观看网站下载| 亚洲国内精品| 亚洲成年人专区| 26uuu国产一区二区三区| 热久久精品免费视频| 亚洲欧美日韩综合aⅴ视频| 伊人春色在线| 欧美日韩色一区| 国内性生活视频| 日韩在线观看电影完整版高清免费| 欧美专区一区| 日韩欧美99| 国产成人精品午夜视频免费| 国内外免费激情视频| 国产精品久久久久久久一区探花 | 99久久久国产| 欧美高清视频一区二区| 欧美人与拘性视交免费看| 91亚洲国产精品| 18视频免费网址在线观看| 欧美性大战久久久久久久蜜臀| 在线三级中文| 按摩亚洲人久久| 日韩精品永久网址| 日韩区国产区| 国产欧美精品一区二区色综合 | 91视频在线看| 在线中文视频| 亚洲精品久久久久久久久久久| 电影中文字幕一区二区| 成人精品一区二区三区电影黑人| 蜜桃一区二区三区在线| 99热在线免费播放| 69堂成人精品免费视频| 久久影院一区二区三区| 99热国产免费| 国产a精品视频| 天堂影院在线| 一区二区在线免费视频| 四虎影视2018在线播放alocalhost| 欧美精品成人一区二区三区四区| 99久久精品一区二区成人| 国产精品视频免费在线观看| 蜜桃av噜噜一区二区三区小说| 亚洲国产高清av| 欧美一级欧美三级在线观看| 精品福利一区| 亚洲精品视频一二三| 亚洲国产欧美另类丝袜| 欧美久久综合网| 欧美激情一区二区三区在线视频观看| 你懂的国产精品| 欧美日韩在线中文| 欧美性受xxxx| 福利片一区二区| 日本亚洲自拍| 欧美日韩国产综合视频在线观看中文| 成人国产精选| 欧洲一区二区在线观看| 亚洲国产你懂的| 日韩一级淫片| 路边理发店露脸熟妇泻火| 色天使久久综合网天天| 精品国产18久久久久久洗澡| 久久男人资源站| 欧美一区二区不卡视频| 99久久www免费| 懂色av一区二区三区| 2024最新电影在线免费观看| 色偷偷91综合久久噜噜| 国产999精品久久久久久| 免费在线稳定资源站| 日韩中文字幕精品| 国产成人亚洲综合a∨婷婷| 国产毛片视频网站| 奇米影视在线99精品| 男人天堂v视频| 久久人人爽亚洲精品天堂| 蜜臀av性久久久久蜜臀aⅴ流畅| 最新亚洲伊人网| 98精品国产高清在线xxxx天堂| 国产精品 日产精品 欧美精品| 免费av网站在线观看| 午夜日韩在线电影| 国产精品久久乐| 99re99热| 日韩亚洲欧美一区| 在线亚洲伦理| 老司机在线视频二区| 国产欧美欧洲| 在线观看精品一区| 国精品一区二区| 成人三级黄色免费网站| 91嫩草视频在线观看| 懂色av一区二区三区| 91欧美在线| 三区在线视频| 成人黄色在线观看| 欧美日韩亚洲91| 欧美激情在线| 蜜芽在线免费观看| 欧美日本韩国国产| 日韩欧美一二区| 免费在线观看一区| 最新精品视频| 亚洲区一区二区| 国产suv一区二区三区88区| 最新日韩三级| 国产高清av在线播放| 日韩天堂在线视频| 97精品国产露脸对白| 日本全棵写真视频在线观看| 欧美亚州一区二区三区| 一区二区三区四区亚洲| 国产精品久久久久久久| www在线播放| 中文字幕免费在线不卡| 日日骚av一区| 亚洲欧美一区二区三区孕妇| 午夜精品久久久久久久四虎美女版| eeuss影院在线播放| 日韩欧美第二区在线观看| 亚洲开心激情网| 2020国产精品| 国产免费久久| 午夜视频在线观看网站| 久久影院中文字幕| 久久午夜国产精品| 国产欧美一区二区三区精品观看| 中文字幕在线资源| 精品久久sese| 亚洲激情电影中文字幕| 久久久国产综合精品女国产盗摄| 蜜桃视频欧美| 欧美天天影院| 黄色三级中文字幕| 欧美综合一区第一页| 欧美性生交片4| 高清不卡一二三区| 国产尤物久久久| 丁香花在线观看完整版电影| 女性隐私黄www网站视频| 91最新国产视频| 日韩精品极品在线观看播放免费视频| 久草精品视频| 在线观看免费观看在线91| 久久亚洲高清| 日韩在线观看网址| 欧美日韩国产色| 国产精品一级二级三级| 欧美理论电影大全| 黑人精品视频| 青青在线免费观看视频| 99在线影院| 久久艳片www.17c.com| 污片在线观看一区二区| 美女视频黄免费的久久| 蜜桃成人av| 亚洲精品88| 你懂的视频在线播放| 激情综合网婷婷| 久久久久久久久一区二区| 国内精品久久久久伊人av| 欧美一区日韩一区| 一区二区三区精品视频| 成人综合婷婷国产精品久久免费| 亚洲无线一线二线三线区别av| 东京久久高清| 日韩成人动漫| 成人片在线看|