Spring Boot升级ESAPI至2.3.0.0时日志工厂加载异常求助
ESAPI 2.3.0.0升级后日志工厂类找不到的解决思路
问题场景
将Spring Boot项目升级到2.7.10,同时把ESAPI从2.2.0.0升级到2.3.0.0,已在类路径添加ESAPI.properties并配置:
ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory ESAPI.LogEncodingRequired=false
但仍抛出异常,提示找不到org.owasp.esapi.reference.JavaLogFactory类,自定义配置未生效。
异常信息:
Caused by: org.owasp.esapi.errors.ConfigurationException: java.lang.ClassNotFoundException: org.owasp.esapi.reference.JavaLogFactory LogFactory class (org.owasp.esapi.reference.JavaLogFactory) must be in class path. at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:108) at org.owasp.esapi.ESAPI.logFactory(ESAPI.java:139) at org.owasp.esapi.ESAPI.getLogger(ESAPI.java:155) at org.owasp.esapi.reference.DefaultEncoder.<init>(DefaultEncoder.java:83) at org.owasp.esapi.reference.DefaultEncoder.<init>(DefaultEncoder.java:106) at org.owasp.esapi.reference.DefaultEncoder.getInstance(DefaultEncoder.java:67) ... 104 common frames omitted Caused by: java.lang.ClassNotFoundException: org.owasp.esapi.reference.JavaLogFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at org.owasp.esapi.util.ObjFactory.loadClassByStringName(ObjFactory.java:158) at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:81)
核心原因
ESAPI 2.3.0.0已移除org.owasp.esapi.reference.JavaLogFactory类,默认配置不再指向该类。出现此异常说明ESAPI未读取到自定义的ESAPI.properties,仍在尝试加载旧的默认日志工厂类。
解决步骤
- 确认配置文件位置:
ESAPI.properties必须放在类路径根目录(Spring Boot项目为src/main/resources/下,不能放在子文件夹),打包后检查jar包内是否存在该文件,路径应为/ESAPI.properties。 - 校验配置项拼写:确保配置项大小写、类名完全正确,无拼写错误:
ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory ESAPI.LogEncodingRequired=false - 排查配置优先级:ESAPI加载配置的优先级为「系统属性 > 环境变量 > 类路径ESAPI.properties > 内置默认配置」,检查启动参数、环境变量中是否存在
ESAPI.Logger配置,避免覆盖自定义配置。 - 补充缺失依赖:ESAPI 2.3.0.0将SL4J日志实现拆分为独立模块,需单独引入Maven依赖:
<dependency> <groupId>org.owasp.esapi</groupId> <artifactId>esapi-logging-slf4j</artifactId> <version>2.3.0.0</version> </dependency> - 检查类加载冲突:多模块项目中,确认无其他模块存在同名的
ESAPI.properties文件,避免配置被覆盖;同时确保配置所在模块被正确依赖,类加载时能优先读取。
内容的提问来源于stack exchange,提问作者PVS
相关产品推荐
相关产品推荐

