springboot随机端口修改方法

本文介绍如何在SpringBoot应用中配置随机端口,包括主函数引用EurekaRandomPortConfig,SpringConfiguration类配置,application.yml及环境配置文件调整,以及自定义EurekaRandomPortConfig类实现端口随机分配。

 

1.主函数添加xx.xxxxx.xxxxx.xxx.xxx.xxxxxx.EurekaRandomPortConfig引用,继承EurekaRandomPortConfig类,

示例:

public class BasicApplication extends EurekaRandomPortConfig{

    public static void main(String[] args) {
        SpringApplication.run(BasicApplication.class, args);
    }
}

2.SpringConfiguration类

添加如下内容:

import xx.xxxxx.xxxxx.xxx.xxx.xxxxxx.EurekaConfig;
import xx.xxxxx.xxxxx.xxx.xxx.xxxxxx.ApplicationInfo;

@Bean
@ConfigurationProperties(prefix = "eureka.random")
public EurekaConfig getEurekaConfig() {
    return new EurekaConfig();
}


@Bean
@ConfigurationProperties(prefix = "spring.application")
public ApplicationInfo getApplicationInfo() {
    return new ApplicationInfo();
}

3.application.yml文件

删除固定端口设置:

server:

  # port: 7205             
  tomcat:
    uri-encoding: UTF-8

添加随机端口范围:

eureka:
  random:
    portBase: 9100
    portRange: 1000

4.appilication-dev.yml、application-prd.yml文件

注释如下节点:

eureka:
  instance:
    preferIpAddress: true
    #instance-id: ${spring.cloud.client.ipAddress}:${server.port}
    lease-renewal-interval-in-seconds: 10 #心跳时间,即服务续约间隔时间(缺省为30s)
    lease-expiration-duration-in-seconds: 30 #发呆时间,即服务续约到期时间(缺省为90s)

EurekaRandomPortConfig类

package xx.xxxxxxxxx.xxxx.xxx.xxxx.xxxxxx;

import java.io.File;
import java.net.InetAddress;
import java.net.Socket;

import org.apache.commons.lang.math.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;
import org.springframework.context.annotation.Bean;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class EurekaRandomPortConfig implements EmbeddedServletContainerCustomizer {
	@Autowired
	private EurekaConfig config;
	@Autowired
	private ApplicationInfo info;
	private int port;//java -jar target/xxx.jar --eureka.random.portBase=9900启动命令修改端口号
	private static String path = "/xxx/xxxx/port";
	private static String fileName;
	private static final int RETRYTIMES = 100;

	@Override
	public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
		/*SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");//设置日期格式
	    System.out.print("begin:"+df.format(new Date())+"\n");*/
		boolean flag = true;
		int num = 0;
		while (flag == true && num < RETRYTIMES) {
			port = RandomUtils.nextInt(config.getPortRange()) + config.getPortBase();

			try {
				InetAddress address = InetAddress.getByName("127.0.0.1");
				Socket s = new Socket(
						address/* InetAddress.getLocalHost().getHostAddress() */, port); // 建立一个Socket连接
				s.close();
				flag = true;
				num++;
				log.info("port is using:" + port);
			} catch (Exception e) {
				try {
					Socket serverSocket = new Socket("0.0.0.0", port); // 建立一个Socket连接
					serverSocket.close();
					flag = true;
					num++;
					log.info("port is using:" + port);
				} catch (Exception ex) {
					/*
					 * File tmpFile = null; try { tmpFile =
					 * File.createTempFile("none", "tmp");
					 * tmpFile.deleteOnExit();
					 * log.info(tmpFile.getAbsolutePath()); } catch (IOException
					 * e1) { log.info("can not create temp file :" +
					 * e1.getMessage()); e1.printStackTrace(); }
					 */
					if (createFile(port, info.getName().toLowerCase()) == true) {
						flag = false;
						log.info("port is idle:" + port);
					} else {
						flag = true;
						num++;
						log.info("port is using:" + port);
					}
				}
			}
		}
		if (flag == true) {
			log.info("Run out of retries!");
		} else {
			configurableEmbeddedServletContainer.setPort(port);
			log.info("start port:" + port);

		}
//		System.out.print("end:"+df.format(new Date())+"\n");
	}

	/*
	 * @PreDestroy public void destory() {
	 * 
	 * log.info("我被销毁了、、、、、我是用的@PreDestory的方式、、、、、、");
	 * log.info("我被销毁了、、、、、我是用的@PreDestory的方式、、、、、、"); }
	 */
	public static boolean createFile(int port, String applicationName) {
		Boolean bool = false;
		File f = new File(path);

		if (!f.exists()) {
			f.mkdirs();// 创建目录
		}
		fileName = port + "_" + applicationName + ".ini";// 文件路径+名称+文件类型

		try {

			File filePath = new File(path);
			File[] tempList = filePath.listFiles();

			for (int i = 0; i < tempList.length; i++) {
				if (tempList[i].isFile()) {
					if (tempList[i].toString().contains(port + "")) {
						bool = false;
						return bool;
					}
				}

			}

			File file = new File(path, fileName);
			file.createNewFile();
			bool = true;

		} catch (Exception e) {
			bool = false;
			log.info("create file fail");
		}

		return bool;
	}

	@Bean
	public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils) {

		EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
		config.setInstanceId(config.getIpAddress() + ":" + port);
		config.setNonSecurePort(port);
		config.setPreferIpAddress(true);
		config.setIpAddress(config.getIpAddress());
		return config;
	}
}

EurekaConfig类

package xx.xxxxxxxx.xxxx.xxx.xxxx.xxxxxxx;

import lombok.Data;

@Data
public class EurekaConfig {

	private int portBase;
	private int portRange;
}

ApplicationInfo类

package xx.xxxxxxxx.xxxx.xxx.xxxx.xxxxxx;

import lombok.Data;

@Data

public class ApplicationInfo {
	private String name;
}

 

胚胎实例分割数据集 一、基础信息 • 数据集名称:胚胎实例分割数据集 • 图片数量: 训练集:219张图片 验证集:49张图片 测试集:58张图片 总计:326张图片 • 训练集:219张图片 • 验证集:49张图片 • 测试集:58张图片 • 总计:326张图片 • 分类类别: 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务。 • 数据格式:图片来源于相关研究领域,格式为常见图像格式,细节清晰。 二、适用场景 • 胚胎发育AI分析系统:构建能够自动分割胚胎实例的AI模型,用于生物学研究中的形态变化追踪和量化分析。 • 医学与生物研究:在生殖医学、遗传学等领域,辅助研究人员进行胚胎结构识别、分割和发育阶段评估。 • 学术与创新研究:支持计算机视觉与生物医学的交叉学科研究,推动AI在胚胎学中的应用,助力高水平论文发表。 • 教育与实践培训:用于高校或研究机构的实验教学,帮助学生和从业者掌握实例分割技术及胚胎学知识。 三、数据集优势 • 精准与专业性:实例分割标注由领域专家完成,确保胚胎轮廓的精确性,提升模型训练的可靠性。 • 任务专用性:专注于胚胎实例分割,填补相关领域数据空白,适用于细粒度视觉分析。 • 格式兼容性:采用YOLO标注格式,易于集成到主流深度学习框架中,简化模型开发与部署流程。 • 科学价值突出:为胚胎发育研究、生命科学创新提供关键数据资源,促进AI在生物学中的实际应用。
物品实例分割数据集 一、基础信息 • 数据集名称:物品实例分割数据集 • 图片数量:训练集1441张、验证集167张、测试集172张,总计1780张图片 • 分类类别:物品(item) • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务 • 数据格式:图片数据,来源于多样场景 二、适用场景 • 物品实例分割AI系统开发:支持构建能够自动识别并精确分割物品轮廓的AI模型,应用于自动化检测和识别系统。 • 物流与仓储管理:用于物品的分割和定位,提升库存管理、货物追踪和物流效率。 • 制造业质量检查:在制造过程中,对零件或产品进行实例分割,辅助质量评估和生产流程优化。 • 零售行业应用:集成至零售系统中,实现商品自动分割和识别,优化库存管理和用户体验。 • 学术研究与创新:支持计算机视觉领域的研究,特别是在实例分割任务上的模型开发和性能评估。 三、数据集优势 • 精准标注:每个物品实例均采用多边形标注,精确捕捉轮廓细节,确保分割准确性和可靠性。 • 数据多样性:数据集覆盖多种场景下的物品图片,增强模型在不同环境下的泛化能力和适应性。 • 任务专用:专注于实例分割任务,标注兼容YOLO等主流深度学习框架,便于模型训练和部署。 • 实用性强:适用于实际工业和应用场景,为物品分割相关AI开发提供高质量数据支撑,加速模型迭代。
一、基础信息 数据集名称:蜜蜂黄蜂人类蜂群关键点检测数据集 图片数量: 训练集:2265张图片 验证集:214张图片 测试集:108张图片 总计:2587张场景图片 分类类别: - Bee(蜜蜂):常见的传粉昆虫,在农业和生态系统中具有重要作用。 - Hornet(黄蜂):可能具有攻击性的昆虫,需监测以防范风险。 - Human(人类):场景中的人物,可用于行为分析或安全应用。 - Swarm(蜂群):指蜜蜂或黄蜂的群体,表示集体行为模式。 标注格式:YOLO格式,包含关键点坐标和类别标签,适用于关键点检测任务。 数据格式:JPEG图片,来源于实际场景,细节丰富。 二、适用场景 农业与环境监测系统开发:数据集支持关键点检测任务,帮助构建能够自动识别蜜蜂、黄蜂及蜂群关键点的AI模型,用于害虫控制、作物保或生态平衡监测。 安全与监控应用:集成至智能监控系统,检测人类和昆虫活动,提供实时警报功能,适用于家庭、公共场所或工业区域的安全管理。 生态研究与行为分析:支持昆虫群体行为研究,通过关键点分析动态模式,助力生态学、昆虫学或生物多样性研究。 教育与实践培训:数据集可用于高校或培训机构,作为计算机视觉和昆虫识别课程的教学资源,提升学生实践能力。 三、数据集优势 多类别覆盖与精准标注:包含4个关键类别,每个类别均有关键点标注,确保模型学习准确的特征表示,提升检测精度。 数据多样性与真实性:图片来源于真实环境,覆盖不同场景和条件,增强模型的泛化能力和鲁棒性。 任务适配性强:标注兼容主流深度学习框架(如YOLO),直接适用于关键点检测任务,并可扩展至其他视觉应用。 应用价值突出:专注于实际需求如农业害虫管理和安全监控,为相关行业提供高效、可靠的数据支持,推动AI技术落地。
<think>好的,我需要帮助用户了解如何部署和使用雷池WAF来防护靶场的安全。首先,我得回忆一下雷池WAF的基本信息。雷池WAF是一款开源的Web应用防火墙,主要用于防护常见的Web攻击,比如SQL注入、XSS等。用户提到他们之前看过关于靶场搭建的教程,比如pikachu和DVWA的部署,现在想在此基础上加强安全防护,使用雷池WAF。 接下来,我需要整理部署雷池WAF的步骤。通常,部署WAF需要先准备服务器环境,可能包括安装必要的依赖,比如Docker,因为很多开源项目现在都推荐用容器化部署。然后,获取雷池WAF的安装包或者Docker镜像,进行配置,包括设置监听端口、反向代理到靶场应用,以及调整安全规则。 另外,用户可能对配置防护规则不太熟悉,需要详细说明如何根据靶场的具体需求调整规则,比如针对SQL注入或XSS的防护策略。同时,测试部分也很重要,用户需要验证WAF是否正常工作,是否成功拦截了攻击请求,而不会误拦截合法流量。 还需要考虑引用之前的资料,比如用户提到的引用[1]和[2],但看起来这些引用是关于靶场搭建和CDN配置的,可能与雷池WAF直接关联不大,但可能需要提到在部署WAF前确保靶场环境已经正确搭建,或者结合CDN来隐藏真实IP,提升整体安全性。 用户的问题还可能涉及雷池WAF的高级配置,比如日志监控、自定义规则等,需要简要提及这些方面,并提供相关问题的建议,比如性能优化、规则调优等。 最后,生成相关问题时要围绕部署步骤、配置优化、故障排除等方面,帮助用户进一步深入学习。</think>### 雷池 WAF 部署与防护靶场安全配置教程 #### 1. **环境准备** - **服务器要求**: 推荐使用 Linux 系统(如 Ubuntu/CentOS),配置至少 2GB 内存、2 核 CPU。 - **依赖安装**: 安装 Docker 环境(雷池 WAF 通常以容器化部署): ```bash curl -fsSL https://get.docker.com | bash -s docker ``` - **靶场环境**: 确保已部署靶场(如 DVWA/pikachu)[^1],并记录其访问端口(例如 `8080`)。 #### 2. **雷池 WAF 部署** - **拉取镜像**: ```bash docker pull chaitin/safeline-mgt ``` - **启动容器**: ```bash docker run --name safeline-mgt -d \ -v /opt/safeline-data:/data \ -p 9443:9443 \ chaitin/safeline-mgt ``` 访问 `https://服务器IP:9443` 完成初始化配置(设置管理员账号)。 #### 3. **反向代理配置** - **绑定靶场服务**: 在雷池控制台添加“防护站点”,填写靶场域名或 IP,并设置反向代理到靶场端口(例如 `http://localhost:8080`)。 - **SSL 证书(可选)**: 若靶场使用 HTTPS,需上传证书或使用 Let's Encrypt 自动申请。 #### 4. **安全规则调优** - **基础防护**: 默认启用 SQL 注入、XSS、路径遍历等规则。 - **自定义规则**: - 针对靶场特点,添加特定过滤条件(如拦截 `DVWA` 的敏感路径)。 - 调整敏感度阈值,减少误报(例如放宽对 `pikachu` 靶场测试路径的限制)。 #### 5. **验证与测试** - **攻击拦截测试**: 使用工具(如 Burp Suite)发送测试 payload(例如 `' OR 1=1--`),观察雷池拦截日志。 - **误报检查**: 正常访问靶场功能,确认无错误拦截。 #### 6. **高级配置(可选)** - **CDN 集成**: 结合 CDN 隐藏服务器真实 IP[^2],提升抗 DDoS 能力。 - **日志分析**: 通过雷池的日志模块分析攻击趋势,优化规则。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值