我正在将我的spring Boot 项目升级到2.7.10,在我们的项目中,我们使用了maven工件esapi - 2.2.0.0。作为我们升级的一部分,我们也将esapi工件升级到下面提到的版本。
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<version>2.3.0.0</version>
</dependency>
我正在尝试根据发行说明建议将esapi升级到2.3.0.0https://github.com/ESAPI/esapi-java-legacy/blob/develop/documentation/esapi4java-core-2.2.1.0-release-notes.txt#L128-L155
在我的Sping Boot 项目类路径中,我添加了ESAPI.properties并使用以下属性进行重写。因为我使用SL 4J日志记录。
ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory
ESAPI.LogEncodingRequired=false
我仍然总是得到下面的错误,总是引用org. owasp. esapi. reference. JavaLogFactory。不知道为什么它没有选择我在ESAPI. properites中覆盖的那个。我还ESAPI.properties在classpath中看到www.example.com。任何想法都会很有帮助。`
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)
1条答案
按热度按时间eqqqjvef1#
我认为这里有两种可能的解释。
最有可能的是,您有第二个ESAPI.properties文件,如果在更新的文件之前找到并使用它,它仍然具有ESAPI.Logger的旧值。如果您没有 * 将系统属性“org.owasp.esapi.logSpecial.discard”设置为true,则当您第一次启动使用ESAPI的应用程序时,将有一些输出发送到stdout。如果您在应用程序服务器启动时捕获stdout,您应该看到类似于以下内容的输出:
查看输出,显示您的ESAPI.properties已加载,前一行应指示其所在位置。确保LOCATION是您希望找到的位置,并且与您更新的版本相对应。
DefaultSecurityConfiguration的Javadoc类描述了查找ESAPI.properties的搜索算法。
第二种可能导致您所观察到的情况(尽管我认为这种可能性比第一种要小得多)是您正在加载的ESAPI.properties文件为ESAPI.Logger定义了多个值。