Jetty 9.4.38将monitoredPath暴露为可访问上下文如何禁用
Jetty 9.4.38 禁用monitoredDir上下文外部访问解决方案
你遇到的问题本质是WebAppProvider默认会将monitoredDir配置的目录关联为可直接访问的静态上下文,仅修改dirAllowed参数只能关闭目录列表展示,无法拦截已知路径的静态文件访问请求,可根据实际部署场景选择以下方案解决:
- 方案1:直接禁用WebAppProvider自动部署(无需自动扫描contexts目录部署应用时使用)
打开etc/jetty-deploy.xml,找到WebAppProvider对应的配置块,添加禁用参数即可,配置示例如下:
<New class="org.eclipse.jetty.deploy.providers.WebAppProvider"> <Set name="enabled">false</Set> <Set name="scanInterval">0</Set> <!-- 其余原有配置可保留或删除,不影响禁用效果 --> </New>
配置完成后重启Jetty,就不会再将monitoredDir目录暴露为可访问的上下文。
- 方案2:添加安全约束拦截访问(需要保留自动部署功能时使用)
在etc/webdefault.xml中新增安全约束配置,直接拒绝所有对该目录的访问请求:
<security-constraint> <web-resource-collection> <web-resource-name>prohibit deploy dir access</web-resource-name> <url-pattern>/contexts/*</url-pattern> <!-- 如果你自定义了monitoredDir的上下文路径,将上方的/contexts/*替换为对应路径即可 --> </web-resource-collection> <auth-constraint /> </security-constraint>
空的auth-constraint标签代表所有用户都没有该路径的访问权限,所有请求都会返回403状态码,无论是否知道具体文件路径都无法访问。
- 方案3:修改monitoredDir存放路径(需要保留自动部署功能时使用)
在start.ini中新增配置,将monitoredDir的存放路径调整到Jetty对外提供服务的静态资源根目录之外:jetty.deploy.monitoredPath=/your/private/path/contexts
只要该路径不在Jetty的静态资源扫描范围内,就不会被关联为可访问的静态上下文,同时不会影响自动部署功能的正常运行。
配置完成后重启Jetty,访问原上下文路径下的已知文件返回403/404状态码即为配置生效。
内容的提问来源于stack exchange,提问作者Alexander M.
相关产品推荐
相关产品推荐

