一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

点击上方“全栈程序员社区”,星标公众号

重磅干货,第一时间送达

责编:乐乐

链接:oschina.net/news/112586/kk-anti-reptile-released

kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的反爬虫组件。

系统要求

  • 基于 spring-boot 开发(spring-boot1.x, spring-boot2.x均可)

  • 需要使用 redis

工作流程

kk-anti-reptile 使用基于 Servlet 规范的的 Filter 对请求进行过滤,在其内部通过 spring-boot 的扩展点机制,实例化一个 Filter,并注入到 Spring 容器 FilterRegistrationBean 中,通过 Spring 注入到 Servlet 容器中,从而实现对请求的过滤。

在 kk-anti-reptile 的过滤 Filter 内部,又通过责任链模式,将各种不同的过滤规则织入,并提供抽象接口,可由调用方进行规则扩展。Filter 调用则链进行请求过滤,如过滤不通过,则拦截请求,返回状态码 509,并输出验证码输入页面,输出验证码正确后,调用过滤规则链对规则进行重置。

目前规则链中有如下两个规则

ip-rule

ip-rule 通过时间窗口统计当前时间窗口内请求数,小于规定的最大请求数则可通过,否则不通过。时间窗口、最大请求数、ip 白名单等均可配置。

ua-rule

ua-rule 通过判断请求携带的 User-Agent,得到操作系统、设备信息、浏览器信息等,可配置各种维度对请求进行过滤。

命中规则后

命中爬虫和防盗刷规则后,会阻断请求,并生成接除阻断的验证码,验证码有多种组合方式,如果客户端可以正确输入验证码,则可以继续访问

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

验证码有中文、英文字母+数字、简单算术三种形式,每种形式又有静态图片和 GIF 动图两种图片格式,即目前共有如下六种,所有类型的验证码会随机出现,目前技术手段识别难度极高,可有效阻止防止爬虫大规模爬取数据

接入使用

后端接入非常简单,只需要引用 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


前端需要在统一发送请求的 ajax 处加入拦截,拦截到请求返回状态码 509 后弹出一个新页面,并把响应内容转出到页面中,然后向页面中传入后端接口 baseUrl 参数即可,以使用 axios 请求为例:

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;


注意

  • apollo-client 需启用 bootstrap

使用 apollo 配置中心的用户,由于组件内部用到 @ConditionalOnProperty,要在 application.properties/bootstrap.properties 中加入如下样例配置,(apollo-client 需要 0.10.0 及以上版本)详见 apollo bootstrap 说明

apollo.bootstrap.enabled = true


  • 需要有 Redisson

连接如果项目中有用到 Redisson,kk-anti-reptile 会自动获取 RedissonClient 实例对象; 如果没用到,需要在配置文件加入如下 Redisson 连接相关配置:

spring.redisson.address=redis://192.168.1.204:6379

spring.redisson.password=xxx


配置一览表

在 spring-boot 中,所有配置在配置文件都会有自动提示和说明,如下图:

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

所有配置都以 anti.reptile.manager 为前缀,如下为所有配置项及说明:

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]

本文标题:反爬虫防盗刷 Spring Boot 组件 kk-anti-reptile 初版发布

本文地址:https://www.oschina.net/news/112586/kk-anti-reptile-released

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

本文分享自微信公众号 – 全栈程序员社区(mush_it)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2453.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Windows Azure Platform Introduction (3) 云计算的特点

    Windows Azure Platform Introduction (3) 云计算的特点

  • 电脑显示已连接网络但是无internet访问

    电脑显示已连接网络但是无internet访问电脑显示已连接网络但是无internet访问自己电脑不知道出什么问题了,连接到无限网络但是无法访问,一开始以为是自己双系统的问题,然后自己在ubuntu那边是可以正常上网的。下面是自己的解决方法方法一:首先打开这个网络的状态,在属性这里,点击进入:打开这个ipv4进行配置,把所有的ip,dns都设置为自动获取地址:如果此时还没有用,在此基础上,再进一步进…

  • 初中基础学java_初中生也能学JAVA吗?[通俗易懂]

    初中基础学java_初中生也能学JAVA吗?[通俗易懂]初中生当然可以学java,初中正是学习力非常强的时期。如果你对计算机有兴趣,就去学啊。现在不是每个人都能明白自己的兴趣点在哪里的。但是由于孩子的年龄太小,自学能力的不足,找一个靠谱的学校从师而学才是正经的学习途径。北大青鸟沈阳三好就有专门为初中生开设的计算机课程,充分地体谅学生的学习情况以及学习基础,所以不用担心自己跟不上进度。Java自1995年问世以来,已历经21年的岁月。20年来,不管IT技…

  • 搭建ntp时间服务器(安装sql2000配置服务器失败)

    简介时间服务NTP:NetworkTimeProtocol作用:用来给其他主机提供时间同步服务,在搭建服务器集群的时候,需要保证各个节点的时间是一致的,时间服务器不失为一个好的选择。准备工作关闭防火墙、关闭selinux系统版本:CentOS7.x,NTP服务器IP:10.220.5.111,客户端IP:10.220.5.179安装配置NTP服务器端一、安装ntp[roo…

  • 无线充qi协议c语言详解,QI无线充通信协议数据包格式解析

    无线充qi协议c语言详解,QI无线充通信协议数据包格式解析QI通信数据格式编码:协议规定时钟信号的频率应该是Fclk=2(4%)KHZ,所以每一位的传输时间约500us,如图所示数据0:500us的高电平,或者500us的低电平数据1:250us高电平+250us低电平,或者250us低电平+250us高电平电源接收端(移动设备端)采用11位异步串行格式传输数据字节数据编码格式为:起始位0、8位数据位、一个奇偶校验位(如果数据字节包含…

  • svn—Eclipse中如何显示svn 信息「建议收藏」

    从svn下载的项目,导入Eclipse中,就是不显示出文件的文件的状态图标和后面的版本号。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号