如何在 Wildfly/JBoss 的 war 中直接托管 .jar 文件?
题
所以我有一个非常简单的问题。我有一个相当简单的 .war 文件,它可以轻松地托管我扔给它的任何类型的文件 - 除了 .jar 文件。
这是我的 .war 文件:
WEB-INF/web.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" />
元信息/清单.MF:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.8.0_05-b13 (Oracle Corporation)
以及以下四个文件:
index.html
folder/jar.jar
folder/jar.zip
folder/index.html
我正在将我的战争部署到 wildfly-8.1.0 服务器上,名称为“testwar.war”。当我这样做时,我可以通过完全正常的 URL 访问除folder/jar.jar 之外的所有文件:
http://localhost:8080/testwar/
http://localhost:8080/testwar/folder/
http://localhost:8080/testwar/folder/jar.zip
所有这些都有效。但
http://localhost:8080/testwar/folder/jar.jar
返回 404。
我一生都无法弄清楚为什么 jar 文件不会显示,或者如何修复它。有什么想法吗?
解决方案
Wildfly/Undertow 的默认 servlet 有一个允许和不允许的扩展列表,可以在 web.xml
通过初始化参数。 jar
默认情况下是不允许的。
将以下内容添加到您的 web.xml
以启用 jar
扩大:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>io.undertow.servlet.handlers.DefaultServlet</servlet-class>
<init-param>
<param-name>default-allowed</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>allowed-extensions</param-name>
<param-value>jar</param-value>
</init-param>
<init-param>
<param-name>disallowed-extensions</param-name>
<param-value>exe,bat,sh</param-value>
</init-param>
</servlet>
其他提示
在这里找到答案: jboss社区线程
默认拒绝拒绝避难所的8.1.0 .jar文件;您必须通过将以下块添加到Web.xml(默认情况下,“jar”是一个不允许的扩展名):<servlet>
<servlet-name>default</servlet-name>
<servlet-class>io.undertow.servlet.handlers.DefaultServlet</servlet-class>
<init-param>
<param-name>allowed-extensions</param-name>
<param-value>jar, js, css, png, jpg, gif, html, htm, txt, pdf, jpeg, xml, zip</param-value>
</init-param>
<init-param>
<param-name>disallowed-extensions</param-name>
<param-value>class, war</param-value>
</init-param>
</servlet>
. 不隶属于 StackOverflow