¿Cómo puedo alojar un archivo .jar directamente dentro de una guerra en Wildfly/JBoss?
Pregunta
Entonces tengo una pregunta muy simple.Tengo un archivo .war bastante trivial que alojará felizmente cualquier tipo de archivo que le lance, excepto un archivo .jar.
Aquí está mi archivo .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" />
META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.8.0_05-b13 (Oracle Corporation)
y los siguientes cuatro archivos:
index.html
folder/jar.jar
folder/jar.zip
folder/index.html
Estoy implementando mi guerra en un servidor wildfly-8.1.0 como "testwar.war".Cuando lo hago, puedo acceder a todos los archivos excepto a la carpeta/jar.jar a través de una URL perfectamente normal:
http://localhost:8080/testwar/
http://localhost:8080/testwar/folder/
http://localhost:8080/testwar/folder/jar.zip
Todos esos funcionan.Pero
http://localhost:8080/testwar/folder/jar.jar
devuelve un 404.
Por mi vida no puedo entender por qué el archivo jar no aparece o cómo solucionarlo.¿Alguna idea?
Solución
El servlet predeterminado de Wildfly/Undertow tiene una lista de extensiones permitidas y no permitidas que se pueden configurar en web.xml
a través de parámetros de inicio. jar
no está permitido de forma predeterminada.
Añade lo siguiente a tu web.xml
para permitir el jar
extensión:
<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>
Otros consejos
Encontré la respuesta aquí: Hilo de la comunidad JBOSS
Versión 8.1.0 de WildFly de forma predeterminada se niega a servir archivos .jar;Debe anular eso agregando el siguiente bloque a su web.xml (de forma predeterminada, "JAR" es una extensión no permitida):
<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>