You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:15:03