Класс кодировщика (org.owasp.esapi.reference.DefaultEncoder) CTOR выдал исключение

Я пытаюсь запустить пример программы, которая кодирует с помощью ESAPI.

Вот пример программы

package hello;

import java.io.UnsupportedEncodingException;
import org.owasp.esapi.ESAPI;
import org.owasp.esapi.Encoder;
import org.owasp.esapi.errors.EncodingException;

public class Sample {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        
        String encodedString = encodeForXML("comma underscore hyphen");
        System.out.println("The encoded string is "+encodedString); 
        

    }
    

    
    public static String encodeForXML(String str)
    {
        return ESAPI.encoder().encodeForXML(str);
    }
    
    
    

}

Это приводит к исключению

Exception in thread "main" 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:101)
    at hello.HelloWorld.encodeForXML(HelloWorld.java:24)
    at hello.HelloWorld.main(HelloWorld.java:14)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:86)
    ... 3 more
Caused by: java.lang.ExceptionInInitializerError
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:377)
    at org.owasp.esapi.util.ObjFactory.loadClassByStringName(ObjFactory.java:158)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:81)
    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.getInstance(DefaultEncoder.java:67)
    ... 8 more
Caused by: org.owasp.esapi.errors.ConfigurationException: Unable to locate resource: esapi-java-logging.properties
    at org.owasp.esapi.logging.java.JavaLogFactory.readLoggerConfiguration(JavaLogFactory.java:95)
    at org.owasp.esapi.logging.java.JavaLogFactory.<clinit>(JavaLogFactory.java:81)
    ... 16 more

Я использую сборку Maven и включил зависимость ESAPI в свой pom.xml, а также включил esapi.properties и validation.properties (оба загружены отсюда: https://github.com/ESAPI/esapi-java-legacy/releases/tag/esapi-2.2.1.1) в src /main/resources, и оба успешно загружены в соответствии с сообщением в консоли. Пожалуйста, дайте мне знать, что мне здесь не хватает.


person Adharsh    schedule 25.11.2020    source источник
comment
Вы работаете, не загрузив ресурсы в свой путь к классам. Maven делает за вас только часть работы. Вам нужно будет указать эти пути к классам либо с помощью аргумента -cp в командной строке, либо явно загрузив их в путь к классу текущего класса.   -  person avgvstvs    schedule 25.11.2020


Ответы (1)


@avgvstvs абсолютно прав. Если вы посмотрите на Javadoc для JavaLogFactory, в нем говорится: Для этой реализации требуется, чтобы файл с именем «esapi-java-logging.properties» существовал в пути к классам.

Правила поиска ESAPI этого конкретного файла свойств отличаются от правил поиска ESAPI.properties. Для этого есть причина, но ее сложно объяснить, потому что компоненты регистратора необходимо загружать немного иначе, чем другие компоненты ESAPI.

person Kevin W. Wall    schedule 26.11.2020
comment
Спасибо, @avgvstvs и Кевин. Я следил за этим документом (owasp.org/ www-pdf-archive/JavaEE-ESAPI_2.0a_install.pdf) раздел 3.4 шаг 1, чтобы добавить мои esapi-2.2.1.1.jar и esapi-2.2.1.1-sources.jar в мой путь к классам в качестве внешних JAR-файлов в eclipse ИДЕ. Но та же проблема сохраняется после установки maven и запуска приложения Java. Можете ли вы сообщить мне, в чем здесь возможная проблема? - person Adharsh; 27.11.2020
comment
Эта ссылка древняя. Вероятно, его следует удалить. Есть несколько более свежих ссылок на github.com/ESAPI/esapi-java-legacy/wiki. в которых объясняется, как это сделать с помощью Maven и Eclipse, но если у вас есть конкретные вопросы по использованию ESAPI, подпишитесь, а затем отправьте сообщение в группу Google esapi-project-users, описанную в github.com/ESAPI/esapi-java-legacy/blob/develop/README.md - person Kevin W. Wall; 29.11.2020