当前位置:  开发笔记 > 编程语言 > 正文

ESAPI - 使用禁止的依赖项获取NoClassDefFoundError(LoggerFactory)

如何解决《ESAPI-使用禁止的依赖项获取NoClassDefFoundError(LoggerFactory)》经验,为你挑选了1个好方法。

我使用espai ESAPI编码字符串值来解决跨站点脚本问题,如下所示(代码片段).

String encodedString = ESAPI.encoder().encodeForHTML(value);

异常跟踪

org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException Encoder class (org.owasp.esapi.reference.DefaultEncoder) CTOR threw exception.
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:129)
    at org.owasp.esapi.ESAPI.encoder(ESAPI.java:99)
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/spi/LoggerFactory
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:74)
    at org.owasp.esapi.ESAPI.logFactory(ESAPI.java:137)
    at org.owasp.esapi.ESAPI.getLogger(ESAPI.java:154)
    at org.owasp.esapi.reference.DefaultEncoder.(DefaultEncoder.java:75)
    at org.owasp.esapi.reference.DefaultEncoder.getInstance(DefaultEncoder.java:59)
    ... 71 more
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.LoggerFactory
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

Maven存储库pom.xml


    org.owasp.esapi
    esapi
    ${org.owasp.esapi.version}
    
        
            commons-collections
            commons-collections
        
        
            xercesImpl
            xercesImpl
        
        
            commons-logging
            commons-logging
        
        
            xml-apis
            xml-apis
        
        
            commons-digester
            commons-digester
        
        
            commons-codec
            commons-codec
        
        
            org.owasp.antisamy
            antisamy
        
        
            log4j
            log4j
        
    

如果我不排除log4j那么它将抛出依赖性收敛错误,因为log4j在maven禁用依赖项中声明,如下所示


    
        enforce
        
            
                
                    ${java.version}
                
                
                    3.0
                
                
                
                    
                        
                        org.slf4j:slf4j-log4j12
                        
                        org.slf4j:slf4j-jdk14
                        
                        log4j:log4j
                        
                        commons-logging:commons-logging
                                                         
                
            
        
        
            enforce
        
    

在这方面的帮助将不胜感激.如果您需要更多详细信息,请与我们联系.提前致谢!



1> 小智..:

ESAPI不支持SLF4J,即使它反过来支持log4j.您对ESAPI的日志记录选择是log4j或java.util.logging,通过ESAPI.properties中的ESAPI.logger属性进行控制.如果您决定使用log4j(即ESAPI.Logger = org.owasp.esapi.reference.Log4JLogFactory),那么您需要log4j.jar以及类路径中的log4j.xml或log4j.properties,具体取决于哪个版本的你正在使用的log4j.或者,您可以通过在ESAPI.properties文件中设置ESAPI.Logger = org.owasp.esapi.reference.JavaLogFactory来使用java.util.logging.

我看到你似乎正在为富国银行做这件事.如果您还有其他问题,请在Teamworks中查找"Kevin W. Wall"并发送电子邮件,因为我是安全代码审核小组的成员,也是ESAPI的项目负责人,所以考虑到更多背景,我或许可以建议其他可能性.

-kevin

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有