当前位置: 首页 > wzjs >正文

网站建设流程视频网站商城前台模板

网站建设流程视频,网站商城前台模板,创可贴在线设计平台,试用网站cms一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源,导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户,减少攻击风险。 通过 IP 封禁,可以有效拉黑攻击者,防止资源被滥用,保障合法用户…

 一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源,导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户,减少攻击风险。

通过 IP 封禁,可以有效拉黑攻击者,防止资源被滥用,保障合法用户的正常访问。对于我们的需求,不让拉进黑名单的IP 访问任何接口

Sentinel本身支持请求来源的黑白名单判断,但默认是对应用级别进行判断,需要改造来源的获取方式为获取请求客户端的 IP,可参考这篇文章自定义来源。但是需要一定成本的

需求分析

使用Nacos是更轻量的动态 IP 黑白名单过滤的常用设计和实现方法。主要考虑以下几点:

IP 黑名单存储在哪里?

一般 IP 黑名单是动态增加的、需要持久化保存。常见的持久化方式包括数据库、配置文件或分布式存储系统(如 Redis),可以根据需要选择。

如何便捷地动态修改 IP 黑名单?

为了方便动态修改 IP 黑名单,所以这里考虑将 配置统一放入 配置中心,通过配置中心的管理页面,开发人员可以便捷地动态修改黑名单规则。Java 项目中,常用的配置中心是 Nacos。

黑白名单的判断逻辑应在哪里处理?

黑白名单逻辑通常部署在高性能的网关或 CDN 上,能更早地拦截非法请求,减轻后端压力。小型项目中,也可直接在应用程序的过滤器中处理

使用何种数据结构保存黑名单? 如何快速匹配用户请求的 IP 是否在黑名单中?

为了高效判断每个用户请求的 IP 是否在黑名单中,首先建议将IP 黑名单从持久化存储同步到本地缓存中,避免频繁查询远程数据源。

对于大流量刷题网站,大规模黑名单使用 布隆过滤器 来存储和过滤黑名单是比较好的,可以节约内存空间、提高检测效率。

最终方案如下

  1. 使用Nacos配置中心存储和管理 IP 黑名单

  2. 后端服务利用Web过滤器判断每个用户请求的 IP

  3. 后端服务利用布隆过滤器过滤 IP 黑名单

布隆过滤器

布隆过滤器是一种高效的概率数据结构,常用于检测一个元素是否在一个集合中,可以有效减少数据库的查询次数,解决缓存穿透等问题

布隆过滤器是由一个位数组k个独立的哈希函数组成。

  • 添加元素时,通过k个哈希函数将元素映射到位数组的k个位置上,将这些位置设置为 1。

  • 查询元素是否存在时,同样计算k个位置

    • 如果所有位置都是1,则说明元素可能存在(因为可能多个不同值通过哈希函数映射到同一位

    • 只要有一个位置为 0,就可以确定元素一定不存在。

其次布隆过滤器不能删除元素,因为可能多个元素映射到同一个位置,修改了这个位置,就会导致其它元素判断错误

Bloom Filter 的误判率与以下因素有关

  • 位数组的大小: 位数组越大,误判率越低,但空间开销会增大。(值会更离散)

  • 哈希函数的个数: 哈希函数越多,误判率越低,但计算成本会增加。(Hash 一次冲突,那我就多 Hash 几次,减少冲突概率)

  • 元素数量: 存入的元素越多,误判率会增加。

布隆过滤器适用场景

布隆过滤器一般都在海量数据判断场景,且可以允许误判。

  1. redis结合bitmap使用,解决缓存穿透的问题

  2. 黑名单校验,识别垃圾邮件

比如: 识别垃圾邮件,把所有黑名单地址都放在布隆过滤器中,在收到邮件时,判断邮件地址是否在布隆过滤器中即可。

Nacos配置中心

官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 一个更易于构建云原生应用的动态服务发现,并且自动配置持久化,配置管理和服务管理平台

Nacos=Eureka+Config+Bus  比 SpringCloud Consul更为强大,并且自带负载均衡功能

下载安装运行

Nacos 快速开始 | Nacos 官网

https://github.com/alibaba/nacos/releases

解压直接运行bin目录下输入cmd命令
startup.cmd -m standalone      #代表单机非集群模式运行

运行成功后直接访问 http://localhost:8848/nacos/index.html

默认账号密码都是 nacos

后端开发

运行Nacos,创建配置,表示黑名单

blackIpList:- "1.1.1.1"- "2.2.2.2"

项目引入依赖

Nacos 融合 Spring Boot,成为注册配置中心 | Nacos 官网

<!--版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x版本-->
<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version>
</dependency>
# 配置中心
nacos:config:server-addr: 127.0.0.1:8848  # nacos 地址bootstrap:enable: true         # 预加载data-id: praxisAI    # 控制台填写的 Data IDgroup: DEFAULT_GROUP  # 控制台填写的 grouptype: yaml            # 选择的文件格式auto-refresh: true    # 开启自动刷新
创建黑名单过滤工具类

新建blackfilter包,黑名单过滤相关的代码都放到该包下,模块化。参考文章,如果是分布式,还可以考虑 Redisson。可以用 Hutool 或 Guava 库自带的 bloomfilter,此处由于项目已经使用了 Hutool 工具库,就用其自带的BitMapBloomFilter即可。

/*** 黑名单过滤工具类*/
@Slf4j
public class BlackIpUtils {//静态的布隆过滤器,存IP黑名单,默认大小1000private static BitMapBloomFilter bloomFilter;
​// 判断 ip 是否在黑名单里public static boolean isBlackIp(String ip) {//true 表示可能在黑名单里//false 一定不在黑名单里return bloomFilter.contains(ip);}
​//获取 nacos 上的黑名单,添加到布隆过滤器中public static void rebuildBlackIp(String configInfo) {//判断配置信息是否为空if (StrUtil.isBlank(configInfo)) {configInfo = "{}";}// 解析 yaml 文件Yaml yaml = new Yaml();//将传入的配置信息解析成 Map 对象Map map = yaml.loadAs(configInfo, Map.class);
​// 获取配置中的 IP 黑名单List<String> blackIpList = (List<String>) map.get("blackIpList");
​// 加锁防止多线程修改布隆过滤器synchronized (BlackIpUtils.class) {//黑名单不为空if (CollUtil.isNotEmpty(blackIpList)) {// 注意构造参数的设置,容量越大,误判率越低BitMapBloomFilter bitMapBloomFilter = new BitMapBloomFilter(1000);//遍历黑名单,将黑名单添加到布隆过滤器中for (String blackIp : blackIpList) {bitMapBloomFilter.add(blackIp);}bloomFilter = bitMapBloomFilter;}//黑名单为空else {bloomFilter = new BitMapBloomFilter(1000);}}}
}

创建Nacos配置监听类

@RefreshScope配置动态刷新,当Nacos配置变化时,可以触发工具类的重新初始化,更新黑名单,但是仅仅只是更新到一个列表里,布隆过滤器内部是由代码控制的

所以这里直接通过 Nacos 控制台获取示例代码,在blackfilter包中新增监听器代码

整体流程

  1. Spring 容器启动后,调用 afterPropertiesSet 方法。

  2. 从 Nacos 获取当前的黑名单配置,并将其加载到布隆过滤器中。

  3. 并且注册一个监听器,用于监听 Nacos 配置的变化。

  4. 处理配置变化

    • 当 Nacos 配置发生变化时,监听器的 receiveConfigInfo 方法会被触发。

    • 新的配置内容会被传递给 BlackIpUtils.rebuildBlackIp 方法,重新构建布隆过滤器。

  5. 使用自定义线程池异步处理nacos配置变化,避免阻塞主线程。

/*** Nacos 监听器*/
@Slf4j
@Component
//表示该类会在 Spring 容器初始化完成后自动调用 afterPropertiesSet 方法
public class NacosListener implements InitializingBean {@NacosInjectedprivate ConfigService configService;  //与 nacos 配置中心交互@Value("${nacos.config.data-id}")private String dataId;@Value("${nacos.config.group}")private String group;@Overridepublic void afterPropertiesSet() throws Exception {log.info("nacos 监听器启动");//从 Nacos 获取指定 dataId 和 group 的配置内容String config = configService.getConfigAndSignListener(dataId, group, 3000L,new Listener() { //注册一个nacos监听器,监听配置信息的变化//定义线程工程final ThreadFactory threadFactory = new ThreadFactory() {//原子类,用于生成线程名称private final AtomicInteger poolNumber = new AtomicInteger(1);@Overridepublic Thread newThread(@NotNull Runnable r) {Thread thread = new Thread(r);thread.setName("refresh-ThreadPool" + poolNumber.getAndIncrement());return thread;}};//自定义线程池:使用固定大小的线程池,传入线程工厂,用于异步处理配置变化的逻辑final ExecutorService executorService = Executors.newFixedThreadPool(1, threadFactory);// 通过线程池异步处理黑名单变化的逻辑@Overridepublic Executor getExecutor() {return executorService;}// 监听后续黑名单变化//当nacos配置中心配置信息发生变化时,会接收新的配置configInfo加载到布隆过滤器中@Overridepublic void receiveConfigInfo(String configInfo) {log.info("监听到配置信息变化:{}", configInfo);//将新的黑名单配置加载到布隆过滤器中BlackIpUtils.rebuildBlackIp(configInfo);}});// 初始化黑名单BlackIpUtils.rebuildBlackIp(config);}
}
创建黑名单过滤器

黑名单应该对所有请求生效( 不止是 Controler 的接口 ),所以基于WebFilter实现而不是 AOP 切面。WebFilter的优先级高于@Aspect切面,因为它在整个 Web 请求生命周期中更早进行处理。

请求进入时的顺序:

  1. 首先,WebFilter拦截 HTTP 请求,并可以根据逻辑决定是否继续执行请求。

  2. 如果请求到过滤器并进入 Spring 的 Bean( 例如 Controller层 ),此时AOP切面生效,对匹配的 Bean 方法进行拦截

  3. 如果 @Aspect 没有阻止执行,最终请求到达 @Controller 或 @RestController 的方法

/*** 全局 IP 黑名单过滤请求拦截器*/
//声明一个过滤器,拦截所有的 HTTP 请求
@WebFilter(urlPatterns = "/*", filterName = "blackIpFilter")
public class BlackIpFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//获取客户端IP地址String ipAddress = NetUtils.getIpAddress((HttpServletRequest) servletRequest);//判断IP地址是否在黑名单中(布隆过滤器中)if (BlackIpUtils.isBlackIp(ipAddress)) {//如果在,则返回错误信息servletResponse.setContentType("text/json;charset=UTF-8");servletResponse.getWriter().write("{\"errorCode\":\"-1\",\"errorMsg\":\"黑名单IP,禁止访问\"}");return;}//放行请求filterChain.doFilter(servletRequest, servletResponse);}
}

最后需要在需要在启动类上加上@ServletComponentScan,这样过滤器才会被扫描到。

@SpringBootApplication
@MapperScan("com.zr.praxisai.mapper")
@EnableScheduling
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)  //开启SpringAOP功能
@ServletComponentScan  //扫描原生的 Servlet 组件(如过滤器、监听器、Servlet)
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}
}
测试

通过 Nacos 控制台修改配置,本地测试的话直接加入本机 IP 即可,Nacos控制台可以看到改动记录和历史版本

blackIpList:- "1.1.1.1"- "2.2.2.2"- "0:0:0:0:0:0:0:1"

通过修改Nacos配置查看后端监听情况

通过Swagger测试发现直接打不开了


文章转载自:

http://6kDEJjmP.mwrsg.cn
http://OKnEF2dR.mwrsg.cn
http://hiZXYcyp.mwrsg.cn
http://Csc3oHtE.mwrsg.cn
http://I5rverYw.mwrsg.cn
http://SlMAjhNa.mwrsg.cn
http://xRIDASWU.mwrsg.cn
http://drffKfCl.mwrsg.cn
http://ZO7rEOTA.mwrsg.cn
http://QXIseDDR.mwrsg.cn
http://TLQaAYyP.mwrsg.cn
http://gF2Dmn1W.mwrsg.cn
http://7HkyQU02.mwrsg.cn
http://5NNQU06q.mwrsg.cn
http://1PVshw2L.mwrsg.cn
http://NUmoWYrG.mwrsg.cn
http://ggIgYtjJ.mwrsg.cn
http://VyGlosbc.mwrsg.cn
http://ENMxtDBe.mwrsg.cn
http://gBBQZUmx.mwrsg.cn
http://5SOIBksR.mwrsg.cn
http://elGPfzTu.mwrsg.cn
http://kfZFIm46.mwrsg.cn
http://kxpjymTG.mwrsg.cn
http://TBl3rAC2.mwrsg.cn
http://9veRMuA8.mwrsg.cn
http://gjebzfPk.mwrsg.cn
http://NYoFJ5si.mwrsg.cn
http://ERPvCzTd.mwrsg.cn
http://hnbpmAfk.mwrsg.cn
http://www.dtcms.com/wzjs/702598.html

相关文章:

  • 蘑菇头表情包制作网站wordpress下一篇调用
  • yahoo怎么提交网站动态图形设计
  • 新乡网站建设服务哪家好问一问小程序入驻入口
  • 网站建设技术服务清单百度游戏
  • 贵阳网站建设网站制作网页设计图片横向排列
  • 帮朋友做网站个人做网站需要多少钱
  • 网站首页内容做网站推广的价格
  • 镇江方圆建设监理咨询有限公司网站有创意的宣传方式有哪些
  • 制作商城版网站开发flash建网站教程
  • 网站建设基本目标江岸网站建设
  • 帮企业做网站的公司注销主体备案与网站备案表
  • 上海 做网站微信小程序制作教程视频
  • 沈阳网站开发怎么推广产品
  • 泰州企业网站建设公司水果电商网站建设相关文献
  • 网站开发的风险与风险管理徐州市建设监理协会网站
  • php网站开发软件编程曹鹏wordpress视频教程
  • 云计算 网站建设seo排名优化培训怎样
  • 做防水广告在哪个网站最好中企动力做的网站被镜像
  • 济南制作网站的公司东莞易进网络专业网站建设 网站
  • WordPress文章数据转emlog苏州seo关键词优化价格
  • 兼职网站推广如何做建设网站要先给钱才能做
  • 外贸企业网站模板建站工具 ip
  • 百度快照优化网站百度云网站建设视频
  • 盘县 网站建设免费网站注册免费创建网站
  • 版面布局网站的域名和所采用的版面布局形式php做企业网站
  • 沈阳网站建设费用推广哪个app最挣钱
  • 网站服务器租用织梦电影网站模板
  • 关键词查询网站设计一套vi的报价
  • 怎样做钓鱼网站云南建设网
  • 怎样建设好网站wordpress 菜单路径