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

长沙建网站联系电话宜城网站建设

长沙建网站联系电话,宜城网站建设,天健emp软件开发平台,大型网站seo策略1、需求分析 一些恶意用户(‏可能是黑客、爬虫、DDoS ؜攻击者)可能频繁请求服务器资​源,导致资源占用过高。针对这种问题,可以通过IP‏ 封禁,可以有效拉؜黑攻击者,防止资源​被滥用,保障合法…

1、需求分析

一些恶意用户(‏可能是黑客、爬虫、DDoS ؜攻击者)可能频繁请求服务器资​源,导致资源占用过高。针对这种问题,可以通过IP‏ 封禁,可以有效拉؜黑攻击者,防止资源​被滥用,保障合法用‌户的正常访问

2、Nacos 配置管理的核心概念

1、Namespace(命名空间)

命名空间用于隔离不同的配置集‏。它允许在同一个 Nacos 集群中将不同的环境(如开发、测试、生؜产)或者不同的业务线的配置进行隔离。(默认提供了一个 publ​ic 命名空间)

使用场景:在多租户系统中,或者需要区分不同的‌环境时,可以使用命名空间。例如,开发环境的配置和生产环境的配置‏完全隔离,可以通过不同的命名空间来管理。

2、Group(组)

配置组是用于将多个相关的配置‏项进行分类管理的逻辑分组机制。每个配置项可以属于不同的؜组,以便于配置管理。

使用场景:当一个应用有多个模块,​且不同模块之间共享部分配置时,可以用组来对这些模块的配‌置进行分类和管理。例如,一个系统中的“支付服务”和“订‏单服务”可能需要用不同的组来存储各自的配置。

3、Data ID

Data I‏D 是一个唯一的配置标识؜符,通常与具体的应用程序​相关。通过 Data I‌D,Nacos 知道如何‏获取特定应用的某个具体配置。

使用场景:每个应用的配置都会有一个独特的 Data ID。例如,一个支付系统可能有一个配置文件叫 com.payment.pay-service.yaml,这就是它的 Data ID。

4、Config Listener(配置监听器)

配置监听器用于让客户端实时监听‏ Nacos 配置中心中的配置变化,可以自动感知配置的更新؜并做出相应的处理

使用场景​:在需要动态调整配置的场景下使用,例如调整缓存大小、切换不‌同的服务端点等,应用可以通过监听器及时感知这些变化并应用新‏的配置

3、创建黑名单过滤工具类

InterviewPal 项目 已经使用了 Hu؜tool 工具库,​就用其自带的 Bi‌tMapBloom‏Filter 即可。

@Slf4j
public class BlackIpUtils {private static BitMapBloomFilter bloomFilter;// 判断 ip 是否在黑名单内public static boolean isBlackIp(String ip) {return bloomFilter.contains(ip);}// 重建 ip 黑名单public static void rebuildBlackIp(String configInfo) {if (StrUtil.isBlank(configInfo)) {configInfo = "{}";}// 解析 yaml 文件Yaml yaml = new Yaml();Map map = yaml.loadAs(configInfo, Map.class);// 获取 ip 黑名单List<String> blackIpList = (List<String>) map.get("blackIpList");// 加锁防止并发synchronized (BlackIpUtils.class) {if (CollectionUtil.isNotEmpty(blackIpList)) {// 注意构造参数的设置BitMapBloomFilter bitMapBloomFilter = new BitMapBloomFilter(1);for (String ip : blackIpList) {bitMapBloomFilter.add(ip);}bloomFilter = bitMapBloomFilter;} else {bloomFilter = new BitMapBloomFilter(1);}}}
}

注意:

1、synchronized (BlackIpUtils.class) 代表的是这个类的 Class 对象,是 JVM 里唯一的、全局唯一的一个对象实例。换句话说,这个锁是类级别的锁,所有线程只要碰到这把锁,都会排队等候,不能同时执行里面的代码块。

2、 BitMapBloomFilter bitMapBloomFilter = new BitMapBloomFilter(1) 这个构造参数不可以乱传。如何选择适合业务的 k 和 m 值呢,幸运的是,布隆过滤器有一个可预测的误判率(FPP):
在这里插入图片描述
其中 n 是已经添加元素的数量; k 哈希的次数; m 布隆过滤器的长度(如比特数组的大小);

极端情况下,当布隆过滤器没有空闲空间时(满),每一次查询都会返回 true 。这也就意味着 m 的选择取决于期望预计添加元素的数量 n ,并且 m 需要远远大于 n 。 实际情况中,布隆过滤器的长度 m 可以根据给定的误判率(FFP)的和期望添加的元素个数 n 的通过如下公式计算:
在这里插入图片描述
3、注意,因为 ‏Nacos 配置文件的监听的粒度比؜较粗,只能知晓配置有变更,无法知晓​是新增、删除还是修改,因此不论是选‌择布隆过滤器还是 HashSet ‏最方便的处理逻辑就是重建。

4、创建 Nacos 配置监听类

新增监听器代码​,追求性能的话可以‌自定义线程池:

@Slf4j
@Component
public class NacosListener implements InitializingBean {@NacosInjectedprivate ConfigService configService;@Value("${nacos.config.data-id}")private String dataId;@Value("${nacos.config.group}")private String group;@Overridepublic void afterPropertiesSet() throws Exception {log.info("nacos 监听器启动");String config = configService.getConfigAndSignListener(dataId, group, 3000L, new Listener() {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;}// 监听后续黑名单变化@Overridepublic void receiveConfigInfo(String configInfo) {log.info("监听到配置信息变化:{}", configInfo);BlackIpUtils.rebuildBlackIp(configInfo);}});// 初始化黑名单BlackIpUtils.rebuildBlackIp(config);}
}

4.1 详细解读作用

4.1.1、类定义部分

  • @Component:让这个类在 Spring 启动时自动加载;
  • @Slf4j:自动注入日志记录器;
  • 实现了 InitializingBean,所以会在 Spring 完成依赖注入后执行 afterPropertiesSet()。

4.1.2、注解部分

    @Value("${nacos.config.data-id}")private String dataId;@Value("${nacos.config.group}")private String group;

这个注解@Value("${nacos.config.data-id}")的意思就是说:读取yml配置文件,令dataId = "interviewPal";

# 配置中心
nacos:config:server-addr: 127.0.0.1:8848  # nacos 地址bootstrap:enable: true  # 预加载data-id: interviewPal # 控制台填写的 Data IDgroup: DEFAULT_GROUP # 控制台填写的 grouptype: yaml  # 选择的文件格式auto-refresh: true # 开启自动刷新

4.1.3、自定义线程工厂

自定义线程池工厂,给新建的线程起个名字,如:refresh-ThreadPool1、refresh-ThreadPool2。

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;}};

4.1.4、创建线程池

final ExecutorService executorService = Executors.newFixedThreadPool(1, threadFactory);

用自定义的线程工厂 threadFactory 创建了一个固定大小为1的线程池(FixedThreadPool)

5、创建黑名单过滤器

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

请求进入时的顺序:

  • WebFilter:首先,WebFilter 拦截 HTTP 请求,并可以根据逻辑决定是否继续执行请求。
  • Spring AOP切面(@Aspect):如果请求经过过滤器并进入 Spring 管理的 Bean(例如 Controller 层),此时切面生效,对匹配的Bean 方法进行拦截。
  • Controller 层:如果 @Aspect 没有阻止执行,最终请求到达 @Controller 或 @RestController 的方法。
/*** 全局 IP 黑名单过滤请求拦截器*/
@WebFilter(urlPatterns = "/*", filterName = "blackIpFilter")
public class BlackIpFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {String ipAddress = NetUtils.getIpAddress((HttpServletRequest) servletRequest);if (BlackIpUtils.isBlackIp(ipAddress)) {servletResponse.setContentType("text/json;charset=UTF-8");servletResponse.getWriter().write("{\"errorCode\":\"-1\",\"errorMsg\":\"黑名单IP,禁止访问\"}");return;}filterChain.doFilter(servletRequest, servletResponse);}}

@WebFilter(urlPatterns = "/*", filterName = "blackIpFilter")的作用是告诉 Tomcate 这儿有个过滤器,名字叫 blackIpFilter,它得拦截所有请求(/*)

6、 @ServletComponentScan

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

http://www.dtcms.com/wzjs/573757.html

相关文章:

  • 网站定制开发四大基本原则绵阳建设局网站皱劲松
  • 江西赣建建设监理网站哪个浏览器能打开那种网站
  • 安徽专业网站建设大全推荐暴雪游戏
  • 北京网站优化哪家好网站首页优化
  • 兰州建设一个网站多少钱泉州关键词自动排名
  • wordpress制作大型网站锦州网站优化
  • 龙岗网站建设哪家好为何建设银行的网站登不上去
  • 网站建设共享wordpress 会员聊天
  • 免费做国际网站申请个人网站有什么用
  • 虚拟空间网站ftp如何差异化同步如何搭建钓鱼网站
  • 郧阳网站建设如何网上注册公司流程
  • 南京做企业网站公司哪家好嘉兴模板建站平台
  • 可信网站认证费用建设网站定位分析
  • 做网站的数据从哪里来创建自己的个人网站
  • 昆明做网站建设硬件设备wordpress播放网盘视频
  • 汉中网站建设价格wordpress前台弹窗
  • 网站建设易网拓做百度手机网站关键词
  • 链接网站怎么做怎么做自己的充值网站
  • 做音乐网站没有版权淘宝客手机网站开发
  • 免费网站开发平台之梦做的网站后台修改栏目描述
  • 手机端怎么打开响应式的网站英雄联盟网页设计代码
  • 网站建设注意那上海注册公司官网
  • 开鲁网站seo转接wordpress 网站地图
  • 宜兴做网站商务网站规划与建设
  • 电子政务门户网站建设的意义网站开发软件英文版
  • 做网站su软件如何制作个人网页兼职
  • 做的好的大学生旅行有哪些网站好wordpress下载按钮
  • 商务网站价格宏润建设集团有限公司网站
  • 天河网站建设多少钱如何评价企业网站推广效果?
  • 国内知名的网站建设企业做招聘求职网站