如何通过XML配置在JETTY_BASE中禁用Jetty的DefaultHandler
在JETTY_BASE中禁用Jetty DefaultHandler的配置方案
所有操作完全在JETTY_BASE目录内执行,无需修改JETTY_HOME的任何文件,适配Jetty版本升级需求。
操作步骤
1. 创建禁用DefaultHandler的自定义配置文件
如果JETTY_BASE下没有etc目录,先执行创建:
mkdir -p $JETTY_BASE/etc
在$JETTY_BASE/etc下新建配置文件jetty-disable-default-handler.xml,写入以下内容:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <!-- 覆盖默认Handler集合,移除DefaultHandler --> <Set name="handler"> <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.eclipse.jetty.server.Handler"> <!-- 保留上下文Handler,正常处理已部署的Web应用 --> <Item> <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> </Item> <!-- 保留HandlerWrapper,兼容已启用的日志、压缩等扩展Handler --> <Item> <New id="HandlerWrapper" class="org.eclipse.jetty.server.handler.HandlerWrapper"/> </Item> <!-- 已移除默认的DefaultHandler配置 --> </Array> </Set> </New> </Set> </Configure>
如果你使用的是Jetty 9及更早版本,只需将头部DTD地址替换为对应版本的即可。
2. 配置Jetty加载自定义配置
如果JETTY_BASE下没有start.d目录,先创建:
mkdir -p $JETTY_BASE/start.d
在$JETTY_BASE/start.d下新建custom-handler.ini,写入以下内容指定加载自定义配置:
etc/jetty-disable-default-handler.xml
3. 禁用DefaultServlet的目录列表功能
将JETTY_HOME中默认的webdefault配置复制到JETTY_BASE下:
cp $JETTY_HOME/etc/webdefault.xml $JETTY_BASE/etc/
编辑$JETTY_BASE/etc/webdefault.xml,找到default Servlet的初始化参数配置,修改以下两个参数:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> <!-- 禁用目录列表 --> <init-param> <param-name>dirAllowed</param-name> <param-value>false</param-value> </init-param> <!-- 隐藏服务器版本信息,进一步降低信息泄露风险 --> <init-param> <param-name>showServerInfo</param-name> <param-value>false</param-value> </init-param> <!-- 其余原有参数保持不变即可 --> </servlet>
在$JETTY_BASE/start.d/custom-handler.ini中追加一行,指定使用修改后的webdefault配置:
jetty.webdefault=etc/webdefault.xml
4. 验证配置生效
重启Jetty服务后进行以下验证:
- 访问Jetty服务根路径或不存在的上下文路径,只会返回标准404错误,不会展示当前实例下所有部署的Web应用列表
- 访问已部署应用下的无默认首页的目录路径,不会返回目录结构列表
- 应用部署启动异常时,不会暴露服务器本地路径、配置等敏感信息
补充说明
如果后续需要自定义静态文件服务,直接将自行实现的Servlet配置到对应Web应用的web.xml中即可,无需依赖DefaultHandler。
内容的提问来源于stack exchange,提问作者knaccc
相关产品推荐
相关产品推荐

