修复Apache Coyote漏洞后,嵌入式Tomcat误绑定8080端口的解决方法
问题:嵌入式Tomcat修复Apache Coyote漏洞后端口变回8080的解决办法
问题背景
我在Java项目中使用嵌入式Tomcat服务器,最初创建服务器的代码如下:
Tomcat _tomcat = new Tomcat();
我已配置Tomcat使用9001端口,此前运行一切正常。
为修复Nessus扫描检测到的Apache Coyote漏洞,我修改了代码:
Tomcat _tomcat = new Tomcat(); _tomcat.getConnector().setXpoweredBy(false); _tomcat.getConnector().setProperty("server", "");
修改后,Tomcat自动绑定到未配置的8080端口,导致多实例运行时出现端口绑定失败错误。
解决方案
核心原因是调用getConnector()时,若Tomcat尚未初始化自定义端口的连接器,会自动创建一个默认使用8080端口的连接器,覆盖了原有端口配置。
需调整配置顺序:先完成端口等基础配置,再修改连接器的漏洞修复参数。
方式一:通过Tomcat实例直接设置端口
// 1. 创建Tomcat实例并先指定自定义端口 Tomcat _tomcat = new Tomcat(); _tomcat.setPort(9001); // 2. 获取已初始化的连接器,修改漏洞修复参数 Connector connector = _tomcat.getConnector(); connector.setXpoweredBy(false); connector.setProperty("server", "");
方式二:手动创建并添加自定义端口连接器
Tomcat _tomcat = new Tomcat(); // 1. 创建自定义端口的连接器 Connector connector = new Connector(); connector.setPort(9001); // 2. 将连接器添加到Tomcat实例 _tomcat.getService().addConnector(connector); // 3. 修改漏洞修复参数 connector.setXpoweredBy(false); connector.setProperty("server", "");
以上两种方式均可保证Tomcat使用指定的9001端口,同时完成Apache Coyote漏洞的修复。
内容的提问来源于stack exchange,提问作者Sachin Naik
相关产品推荐
相关产品推荐

