<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個(gè)依賴搞定 Spring Boot 反爬蟲,防止接口盜刷!

          共 3043字,需瀏覽 7分鐘

           ·

          2022-07-27 21:44

          往期熱門文章:

          1、千萬不要把 Request 傳遞到異步線程里面!有坑!

          2、不卷了!入職字節(jié)一周就果斷跑了。

          3、SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫分離!

          4、不好意思, Maven 該換了!

          5、這是我見過寫得最爛的Controller層代碼,沒有之一!

          kk-anti-reptile 是適用于基于spring-boot開發(fā)的分布式系統(tǒng)的反爬蟲組件

          系統(tǒng)要求

          • 基于 spring-boot 開發(fā) (spring-boot1.x, spring-boot2.x 均可)
          • 需要使用 redis

          工作流程

          kk-anti-reptile 使用基于 Servlet 規(guī)范的的 Filter 對(duì)請(qǐng)求進(jìn)行過濾,在其內(nèi)部通過 spring-boot 的擴(kuò)展點(diǎn)機(jī)制,實(shí)例化一個(gè) Filter,并注入到 Spring 容器 FilterRegistrationBean 中,通過 Spring 注入到 Servlet 容器中,從而實(shí)現(xiàn)對(duì)請(qǐng)求的過濾
          kk-anti-reptile 的過濾 Filter 內(nèi)部,又通過責(zé)任鏈模式,將各種不同的過濾規(guī)則織入,并提供抽象接口,可由調(diào)用方進(jìn)行規(guī)則擴(kuò)展
          Filter 調(diào)用則鏈進(jìn)行請(qǐng)求過濾,如過濾不通過,則攔截請(qǐng)求,返回狀態(tài)碼 509,并輸出驗(yàn)證碼輸入頁面,輸出驗(yàn)證碼正確后,調(diào)用過濾規(guī)則鏈對(duì)規(guī)則進(jìn)行重置
          目前規(guī)則鏈中有如下兩個(gè)規(guī)則

          ip-rule

          ip-rule 通過時(shí)間窗口統(tǒng)計(jì)當(dāng)前時(shí)間窗口內(nèi)請(qǐng)求數(shù),小于規(guī)定的最大請(qǐng)求數(shù)則可通過,否則不通過。時(shí)間窗口、最大請(qǐng)求數(shù)、ip 白名單等均可配置

          ua-rule

          ua-rule 通過判斷請(qǐng)求攜帶的 User-Agent,得到操作系統(tǒng)、設(shè)備信息、瀏覽器信息等,可配置各種維度對(duì)請(qǐng)求進(jìn)行過濾

          命中規(guī)則后

          命中爬蟲和防盜刷規(guī)則后,會(huì)阻斷請(qǐng)求,并生成接除阻斷的驗(yàn)證碼,驗(yàn)證碼有多種組合方式,如果客戶端可以正確輸入驗(yàn)證碼,則可以繼續(xù)訪問
          驗(yàn)證碼有中文、英文字母 + 數(shù)字、簡(jiǎn)單算術(shù)三種形式,每種形式又有靜態(tài)圖片和 GIF 動(dòng)圖兩種圖片格式,即目前共有如下六種,所有類型的驗(yàn)證碼會(huì)隨機(jī)出現(xiàn),目前技術(shù)手段識(shí)別難度極高,可有效阻止防止爬蟲大規(guī)模爬取數(shù)據(jù)

          接入使用

          后端接入非常簡(jiǎn)單,只需要引用 kk-anti-reptile 的 maven 依賴,并配置啟用 kk-anti-reptile 即可

          加入 maven 依賴

          <dependency>
              <groupId>cn.keking.project</groupId>
              <artifactId>kk-anti-reptile</artifactId>
              <version>1.0.0-SNAPSHOT</version>
          </dependency>
          配置啟用 kk-anti-reptile
          anti.reptile.manager.enabled=true
          前端需要在統(tǒng)一發(fā)送請(qǐng)求的 ajax 處加入攔截,攔截到請(qǐng)求返回狀態(tài)碼 509 后彈出一個(gè)新頁面,并把響應(yīng)內(nèi)容轉(zhuǎn)出到頁面中,然后向頁面中傳入后端接口 baseUrl 參數(shù)即可,以使用 axios 請(qǐng)求為例:
          import axios from 'axios';
          import {baseUrl} from './config';

          axios.interceptors.response.use(
            data => {
              return data;
            },
            error => {
              if (error.response.status === 509) {
                let html = error.response.data;
                let verifyWindow = window.open("","_blank","height=400,width=560");
                verifyWindow.document.write(html);
                verifyWindow.document.getElementById("baseUrl").value = baseUrl;
              }
            }
          );

          export default axios;

          注意

          1.apollo-client 需啟用 bootstrap

          使用 apollo 配置中心的用戶,由于組件內(nèi)部用到 @ConditionalOnProperty,要在 application.properties/bootstrap.properties 中加入如下樣例配置,(apollo-client 需要 0.10.0 及以上版本)詳見 apollo bootstrap 說明
          https://github.com/apolloconfig/apollo/wiki/
          apollo.bootstrap.enabled = true

          2.需要有 Redisson 連接

          如果項(xiàng)目中有用到 Redisson,kk-anti-reptile 會(huì)自動(dòng)獲取 RedissonClient 實(shí)例對(duì)象;如果沒用到,需要在配置文件加入如下 Redisson 連接相關(guān)配置
          spring.redisson.address=redis://192.168.1.204:6379
          spring.redisson.password=xxx

          配置一覽表

          在 spring-boot 中,所有配置在配置文件都會(huì)有自動(dòng)提示和說明,如下圖

          所有配置都以 anti.reptile.manager 為前綴,如下為所有配置項(xiàng)及說明


          來源:https://www.oschina.net/news/112586


          往期熱門文章:

          1、線上MySQL的自增id用盡怎么辦?被面試官干趴下了!
          2、計(jì)算機(jī)專業(yè)會(huì)不會(huì)成為下一個(gè)土木?
          3、xxl-job驚艷的設(shè)計(jì),怎能叫人不愛
          4、ArrayList#subList這四個(gè)坑,一不小心就中招
          5、面試官:大量請(qǐng)求 Redis 不存在的數(shù)據(jù),從而影響數(shù)據(jù)庫,該如何解決?
          6、MySQL 暴跌!
          7、超越 Xshell!號(hào)稱下一代 Terminal 終端神器,用完愛不釋手!
          8、IDEA 官宣全新默認(rèn) UI,太震撼了!!
          9、讓你直呼「臥槽」的 GitHub 項(xiàng)目!
          10、Kafka又笨又重,為啥不選Redis?


          瀏覽 63
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色综合五月 | 国产性爱电影网 | 清娱乐av | 亚洲欧美精品另类 | 色中色AV |