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

英文免费网站模板大庆+网站建设

英文免费网站模板,大庆+网站建设,微网站开发教程,温州手机网站建设一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源#xff0c;导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户#xff0c;减少攻击风险。 通过 IP 封禁#xff0c;可以有效拉黑攻击者#xff0c;防止资源被滥用#xff0c;保障合法用户… 一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户减少攻击风险。 通过 IP 封禁可以有效拉黑攻击者防止资源被滥用保障合法用户的正常访问。对于我们的需求不让拉进黑名单的IP 访问任何接口。 Sentinel本身支持请求来源的黑白名单判断但默认是对应用级别进行判断需要改造来源的获取方式为获取请求客户端的 IP可参考这篇文章自定义来源。但是需要一定成本的 需求分析 使用Nacos是更轻量的动态 IP 黑白名单过滤的常用设计和实现方法。主要考虑以下几点: IP 黑名单存储在哪里? 一般 IP 黑名单是动态增加的、需要持久化保存。常见的持久化方式包括数据库、配置文件或分布式存储系统(如 Redis)可以根据需要选择。 如何便捷地动态修改 IP 黑名单? 为了方便动态修改 IP 黑名单所以这里考虑将 配置统一放入 配置中心通过配置中心的管理页面开发人员可以便捷地动态修改黑名单规则。Java 项目中常用的配置中心是 Nacos。 黑白名单的判断逻辑应在哪里处理? 黑白名单逻辑通常部署在高性能的网关或 CDN 上能更早地拦截非法请求减轻后端压力。小型项目中也可直接在应用程序的过滤器中处理 使用何种数据结构保存黑名单? 如何快速匹配用户请求的 IP 是否在黑名单中? 为了高效判断每个用户请求的 IP 是否在黑名单中首先建议将IP 黑名单从持久化存储同步到本地缓存中避免频繁查询远程数据源。 对于大流量刷题网站大规模黑名单使用 布隆过滤器 来存储和过滤黑名单是比较好的可以节约内存空间、提高检测效率。 最终方案如下 使用Nacos配置中心存储和管理 IP 黑名单 后端服务利用Web过滤器判断每个用户请求的 IP 后端服务利用布隆过滤器过滤 IP 黑名单 布隆过滤器 布隆过滤器是一种高效的概率数据结构常用于检测一个元素是否在一个集合中可以有效减少数据库的查询次数解决缓存穿透等问题 布隆过滤器是由一个位数组和k个独立的哈希函数组成。 添加元素时通过k个哈希函数将元素映射到位数组的k个位置上将这些位置设置为 1。 查询元素是否存在时同样计算k个位置 如果所有位置都是1则说明元素可能存在因为可能多个不同值通过哈希函数映射到同一位 只要有一个位置为 0就可以确定元素一定不存在。 其次布隆过滤器不能删除元素因为可能多个元素映射到同一个位置修改了这个位置就会导致其它元素判断错误 Bloom Filter 的误判率与以下因素有关 位数组的大小: 位数组越大误判率越低但空间开销会增大。(值会更离散) 哈希函数的个数: 哈希函数越多误判率越低但计算成本会增加。(Hash 一次冲突那我就多 Hash 几次减少冲突概率) 元素数量: 存入的元素越多误判率会增加。 布隆过滤器适用场景 布隆过滤器一般都在海量数据判断场景且可以允许误判。 redis结合bitmap使用解决缓存穿透的问题 黑名单校验识别垃圾邮件 比如: 识别垃圾邮件把所有黑名单地址都放在布隆过滤器中在收到邮件时判断邮件地址是否在布隆过滤器中即可。 Nacos配置中心 官网Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 一个更易于构建云原生应用的动态服务发现并且自动配置持久化配置管理和服务管理平台 NacosEurekaConfigBus  比 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版本-- dependencygroupIdcom.alibaba.boot/groupIdartifactIdnacos-config-spring-boot-starter/artifactIdversion0.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 黑名单ListString blackIpList (ListString) 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包中新增监听器代码 整体流程 Spring 容器启动后调用 afterPropertiesSet 方法。 从 Nacos 获取当前的黑名单配置并将其加载到布隆过滤器中。 并且注册一个监听器用于监听 Nacos 配置的变化。 处理配置变化 当 Nacos 配置发生变化时监听器的 receiveConfigInfo 方法会被触发。 新的配置内容会被传递给 BlackIpUtils.rebuildBlackIp 方法重新构建布隆过滤器。 使用自定义线程池异步处理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 请求生命周期中更早进行处理。 请求进入时的顺序: 首先WebFilter拦截 HTTP 请求并可以根据逻辑决定是否继续执行请求。 如果请求到过滤器并进入 Spring 的 Bean( 例如 Controller层 )此时AOP切面生效对匹配的 Bean 方法进行拦截 如果 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;charsetUTF-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://www.pierceye.com/news/510989/

相关文章:

  • 门户网站建设方案模板那个做我女朋友的网站
  • 网站建设新手教程视频英语复试口语模板
  • 网站肯定被k北京高端网站建
  • 成都手机网站设计山东省建设监理协会网站6
  • 长春网站建设那家好沛县做网站
  • 做网络写手 哪个网站比较好电商网站开发用什么语言
  • 如何做网站资讯淘宝官网登录入口
  • 江苏建设工程招标网官方网站免费网址怎么申请注册
  • 河池网站优化网络宣传渠道有哪些
  • 外贸建立网站怎么做42区 网站开发指南
  • wordpress多本小说站出售延安做网站
  • 北京快速网站建设找工作一般上什么网站比较好
  • 做外贸必须有公司网站么下沙网站制作
  • 西安学校网站建设网站搜索工具
  • 小型网站的建设方案龙江人社app二维码图片
  • 西宁微网站建设wordpress更新文章post.php错误
  • 网络营销网站平台有哪些众希网站建设
  • 网站建设营销的技巧公司招聘网站排行榜
  • 长治网站建设收费多少农村自建房设计图 户型图
  • 广州网站建设 骏域网站建设做搜狗网站优化首页软
  • 广州网站设计软件简约大方网站
  • 网站建设与管理专业好吗做国际贸易如何建网站
  • 小说百度风云榜上海seo网络推广渠道
  • 建设局网站打不开是什么原因wordpress客户端插件
  • 农业 网站源码网站制作产品优化
  • 企业公司网站制作建设怎么区分营销型网站
  • 如何选择顺德网站建设网站开发源代码
  • 北京城乡建设部网站网站页面是自己做还是使用模板
  • 网新企业网站管理系统厦门好景科技做网站
  • 手机网站开发语言深圳网站建设培训