Actualicé la versión de log4j a 2.15.0 debido a una vulnerabilidad de seguridad. pero al implementar, aparece el error "EMPTY_BYTE_ARRAY" en el servidor wildfly.
Pom.xml:
<properties> <java.version>1.8</java.version> <log4j2.version>2.16.0</log4j2.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- Add Log4j2 Dependency --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency> <!-- Add Log4j2 Async Dependency --> <dependency> <groupId>axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> <scope>compile</scope> </dependency> <dependency> <groupId>axis</groupId> <artifactId>axis-wsdl4j</artifactId> <version>1.5.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.0-b04</version> </dependency> <dependency> <groupId>javax.xml.rpc</groupId> <artifactId>javax.xml.rpc-api</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> </dependency> <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>commons-validator</groupId> <artifactId>commons-validator</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.11</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>Registro de errores:
2021-12-14 15:45:52,957 ERROR [org.jboss.msc.service.fail] (Grupo de subprocesos de ServerService -- 95) MSC000001: Error al iniciar el servicio jboss.deployment.unit."lojistikteminatlitasimacilik-0.0.1-SNAPSHOT .war".undertow-implementación: org.jboss.msc.service.StartException en el servicio jboss.deployment.unit."lojistikteminatlitasimacilik-0.0.1-SNAPSHOT.war".undertow-implementación: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY
en org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81)
en java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
en java.util.concurrent.FutureTask.run(FutureTask.java:266)
en org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
en org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
en org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
en org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
en java.lang.Thread.run(Thread.java:748)
en org.jboss.threads.JBossThread.run(JBossThread.java:513)
Causado por: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY
en org.apache.logging.log4j.core.config.ConfigurationSource.(ConfigurationSource.java:56)
en org.apache.logging.log4j.core.config.NullConfiguration.(NullConfiguration.java:32)
en org.apache.logging.log4j.core.LoggerContext.(LoggerContext.java:85)
en org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:254)
en org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218)
en org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:140)
en org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:123)
en org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:230)
en org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
en org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
en org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.getLoggerContext(Log4J2LoggingSystem.java:264)
en org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.beforeInitialize(Log4J2LoggingSystem.java:131)
en org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:220)
en org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:199)
en org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
en org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
en org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
en org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
en org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:69)
en org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)
en org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
en org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:157)
en org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:137)
en org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:91)
en org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
en io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:204)
en io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:187)
en io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
en io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
en org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
en io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:255)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96)
en org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78)
... 8 más
2021-12-14 15:45:52,967 ERROR [org.jboss.as.controller.management-operation] (Subprocesos de solicitud de administración externa - 3) WFLYCTL0013: Operación ("agregar") falló - dirección: ([("implementación " => "lojistikteminatlitasimacilik-0.0.1-SNAPSHOT.war")]) - descripción de la falla: {"WFLYCTL0080: Servicios fallidos" => {"jboss.deployment.unit.\"lojistikteminatlitasimacilik-0.0.1-SNAPSHOT.war\ ".undertow-deployment" => "java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY
Causado por: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY"}}
2021-12-14 15:45:52,968 ERROR [org.jboss.as.server] (Subprocesos de solicitud de administración externa -- 3) WFLYSRV0021: La implementación de la implementación "lojistikteminatlitasimacilik-0.0.1-SNAPSHOT.war" se revirtió con el siguiente mensaje de error:
{"WFLYCTL0080: Servicios fallidos" => {"jboss.deployment.unit.\"lojistikteminatlitasimacilik-0.0.1-SNAPSHOT.war\".undertow-deployment" => "java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY
Causado por: java.lang.NoSuchFieldError: EMPTY_BYTE_ARRAY"}}
Pude solucionar (no arreglar) cambiando a JSONLayout en lugar de PatternLayout. PatternLayout no parece funcionar en algunos casos, incluso con su constructor predeterminado... aún no he descubierto por qué.
Así que tuve este problema esta mañana al actualizar log4j a la versión 2.15.0. El problema que encontré fue que una dependencia experta estaba incorporando una versión anterior de log4j (2.14.1 en mi caso) que devolvería la constante de error "EMPTY_BYTE_ARRAY". En 2.15.0, EMPTY_BYTE_ARRAY no existe y da este error.
Sugeriría mirar su árbol de dependencia maven y ver si se está extrayendo una versión anterior de log4j-api, log4j-core u otra biblioteca de log4j que no sea la versión que está usando, que parece ser 2.16.0 .
Hice esto a través de Eclipse estableciendo mi objetivo experto en "dependencia: árbol".
Encontré un problema similar.
En mi caso, necesitaba reemplazar spring-boot-starter-log4j2 con log4j-xxx. Al principio, solo agregué log4j-slf4j-impl, log4j-core, log4j-jul y jul-to-slf4j. Después de comparar el árbol de dependencias, también agregué log4j-api y el problema desapareció.
Así que le sugiero que compare el árbol de dependencias para ver si faltan algunas dependencias.
Wildfly usa el artefacto log4j-api (probablemente una versión anterior a la 2.16.0) y la discrepancia de versión entre log4j-api y log4j-core causará problemas. documentación sobre cómo incorporar log4j-core en su aplicación
Para obtener más información, consulte: https://www.wildfly.org/news/2021/12/13/Log4j-CVE/
Debe actualizar log4j api en wildfly a 2.15.0 o 2.16.0 (actualmente más reciente). Copie el nuevo jar api de log4j en \wildfly\modules\system\layers\base\org\apache\logging\log4j\api\main
y actualizar module.xml
También puede excluir log4j de wildfly usando el archivo jboss-deployment-structure, pero de todos modos es mejor tener una versión fija de log4j en wildfly
si no puede usar 2.15.0 o 2.16.0, intente 2.12.2 y corrija también la vulnerabilidad de seguridad. Aquí, el sitio log4j: https://logging.apache.org/log4j/2.x/
Mitigación
En la versión 2.12.2 Log4j deshabilita el acceso a JNDI por defecto. El uso de JNDI en la configuración ahora debe habilitarse explícitamente. Las llamadas a JndiLookup ahora devolverán una cadena constante. Además, Log4j ahora limita los protocolos de forma predeterminada solo a Java. La función de búsqueda de mensajes se ha eliminado por completo.
En la versión 2.16.0 Log4j deshabilita el acceso a JNDI por defecto. Las búsquedas JNDI en la configuración ahora deben habilitarse explícitamente. Además, Log4j ahora limita los protocolos de forma predeterminada a solo java, ldap y ldaps y limita los protocolos ldap a solo acceder a objetos primitivos de Java. Los hosts que no sean el host local deben estar explícitamente permitidos. La función de búsqueda de mensajes se ha eliminado por completo.
Tuve que hacer dos cosas para que funcionara:
Si aún no lo tiene, cree src/main/webapp/WEB-INF/jboss-deployment-structure.xml. En su interior agregar
<jboss-deployment-structure> <deployment> <exclusions> <module name="org.apache.logging.log4j.api"/> </exclusions> </deployment> </jboss-deployment-structure>En mi caso, el archivo war todavía tenía tanto la versión 2.11.0 como la nueva 2.16.0 dentro de WEB-INF/lib. Abrí la guerra y eliminé las versiones 2.11.0.
Por alguna razón, en mi caso hubo una discrepancia en las versiones de log4j-api y log4j-core. Entonces, tuve que excluirlo manualmente de pom. Ahora está funcionando como se esperaba.
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.1</version> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.17.1</version> </dependency>Después de agregar log4j2.version en pom.xml, ej.
<propiedades> .. <log4j2.versión>2.17.1</log4j2.versión> </propiedades>
necesitamos limpiar y compilar los archivos existentes. Con Maven corriendo
mvn instalación limpia
Al realizar este paso, tendremos todos los últimos archivos compilados y evitaremos encontrarnos con el error.