这两天跟所有小伙伴一样,从2021年12月10日开始爆出log4j漏洞后,就疯狂在修复系统漏洞。
临时修复方案是:应用启动参数加上:-Dlog4j2.formatMsgNoLookups=true
到了第二天,12月11日,官方给出了正式的修复版本:
查找maven仓库,相应的包也更新了
mvnrepository.com/artifact/or…
mvnrepository.com/artifact/or…
但是,项目上使用的spring boot依赖,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
查了下springboot log4j2的依赖包,还没更新修复!
mvnrepository.com/artifact/or…
在 issue 也看到留言了
最后发现,下面有人解决了:
也就是,spring boot项目的解决方案,是在 pom.xml 里,声明
<properties>
<log4j2.version>2.15.0</log4j2.version>
</properties>
会替换spring boot 对log4j组件的版本号。
因为文章里面也提到,
在文档 docs.spring.io/spring-boot… 中,有列举出所有组件的版本号变量名称。
我们在声明中替换的变量名,跟文档上的参数得对的上,才会更新。
能用此方案的前提是,项目的根pom.xml是依赖了如下类似内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/>
</parent>
已经依赖了官方组件。
如果没有,则只能在根pom.xml,手动添加如下依赖,更新下版本:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</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-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>${log4j2.version}</version>
</dependency>
当然也要声明
<properties>
<log4j2.version>2.15.0</log4j2.version>
</properties>
区别在于,上面的声明,是替换官方组件内置的参数;
下面的声明,只是自己本地的变量名称。