如何为JRuby Warbler集成的Jetty 9.2通过XML配置启用软链接访问
Jetty 9.2.9 + Warbler 软链接访问配置指南
认知澄清
在Warbler内置Jetty的打包场景下,不需要像Jetty独立部署那样,把软链接配置绑定到全局配置中ID为wac的WebAppContext节点。Jetty自带固定配置加载规则:WEB-INF/jetty-web.xml中的所有配置,加载时会自动绑定到当前Web应用对应的WebAppContext实例,完全满足配置生效的要求。
落地配置方案
方案1:最小改动(推荐)
- 直接在WAR包的
WEB-INF目录下新建jetty-web.xml,无需修改现有web.xml、webserver.xml、webserver.properties文件 - 文件内容按Jetty 9.2.9语法编写,完整结构如下:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "configure_9_3.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <!-- 允许软链接访问 --> <Call name="addAliasCheck"> <Arg> <New class="org.eclipse.jetty.server.handler.AllowSymLinkAliasChecker"></New> </Arg> </Call> </Configure>
- Warbler默认会自动扫描WEB-INF目录下的jetty-web.xml并纳入打包范围,Jetty启动阶段会自动将AliasChecker绑定到当前WebAppContext上,不需要额外定位全局配置中的wac节点
- 如果使用的Warbler版本较老,没有自动拷贝该文件,只需在Warbler打包配置中加一行规则,将jetty-web.xml显式加入webapp资源拷贝清单即可,无需改动其他核心配置
方案2:复用现有webserver.xml配置
- 打开根节点为
Configure class="org.eclipse.jetty.server.Server"的webserver.xml,定位到文件中定义WebAppContext的节点(即此前见到的ID为wac的或 元素块) - 将软链接配置片段直接插入该WebAppContext定义块的内部,与块内其他给WebAppContext设置参数的
、 节点保持同一层级 - 注意禁止将片段插入Server根节点层级,否则会因Server类不存在addAliasCheck方法,直接触发启动报错
失效排查要点
- Jetty 9.2.9版本的
AllowSymLinkAliasChecker是jetty-server.jar的内置类,无需额外引入第三方依赖 - 配置生效后如果仍无法访问软链接指向的资源,优先检查系统权限:运行Jetty的系统用户必须对软链接指向的实际物理路径有读取权限,Jetty的软链接检查器只负责放行路径解析,不会绕过操作系统的权限限制
- 不要尝试在标准web.xml中添加相关配置:web.xml是Servlet规范的通用配置文件,不支持Jetty私有的WebAppContext方法调用,写入的相关内容不会产生任何效果
内容的提问来源于stack exchange,提问作者Maja Cieślak
相关产品推荐
相关产品推荐

