AccessControlException: доступ запрещен - вызывающей функции не удалось загрузить файл свойств - PullRequest
0 голосов
/ 10 апреля 2010

У меня есть среда jar-архива, в которой мой класс будет вызываться в такой папке:

java -jar "emarket.jar" ../tournament 100

Мой скомпилированный класс развернут в папке ../tournament, эта команда работает хорошо.

После того, как я изменил свой код для загрузки файла свойств, он получает следующее сообщение об исключении:

Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission agent.properties read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Agent10479475.getPropertiesFromConfigFile(Agent10479475.java:110)
at Agent10479475.<init>(Agent10479475.java:100)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at emarket.client.EmarketSandbox.instantiateClientObjects(EmarketSandbox.java:92)
at emarket.client.EmarketSandbox.<init>(EmarketSandbox.java:27)
at emarket.client.EmarketSandbox.main(EmarketSandbox.java:166)

Мне интересно, почему эта проверка безопасности не пройдет. Я запускаю функцию getPropertitiesFromConfigFile () внутри конструктора по умолчанию моего класса, например:

public class Agent10479475 extends AbstractClientAgent
{
    //default constructor
    public Agent10479475()
    {
        //set all properties to their default values in constructor
        FT_THRESHOLD                        = 400;
        FT_THRESHOLD_MARGIN                 = 50;

        printOut("Now loading properties from a config file...", "");
        getPropertiesFromConfigFile();
        printOut("Finished loading","");
        }

    private void getPropertiesFromConfigFile()
    {
        Properties props = new Properties();

        try
        {
            props.load(new FileInputStream("agent.properties"));
            FT_THRESHOLD            = Long.parseLong(props.getProperty("FT_THRESHOLD"));
            FT_THRESHOLD_MARGIN         = Long.parseLong(props.getProperty("FT_THRESHOLD_MARGIN "));
        }
        catch(java.io.FileNotFoundException fnfex)
        {
            printOut("CANNOT FIND PROPERTIES FILE :", fnfex);
        }
        catch(java.io.IOException ioex)
        {
            printOut("IOEXCEPTION OCCURED :", ioex);
        }
    }

}

Мой класс загружает свой собственный файл .properties в той же папке. почему среда Java жалуется на такой отказ в доступе? Должен ли я настроить класс emarket.client.EmarketSandbox, который не написан мной и не хранится в emarket.jar, чтобы получить доступ к файлу agent.properties?

Любые намеки или предложения приветствуются. Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 10 апреля 2010

Вы можете поместить файл "agent.properties" в ваш jar-файл и получить к нему доступ через getResourceAsStream . Поскольку я не знаю вашей политики безопасности в вашей песочнице, это может работать с разрешениями или нет.

1 голос
/ 10 апреля 2010

Требуются разрешения для доступа к системным свойствам файлам, и ваш код явно работает в изолированной программной среде, которая не дает разрешения. Вам либо нужно

  • изменить правила безопасности песочницы, чтобы разрешить доступ к этому файлу,

  • добавить определенный API, который вы можете вызвать для передачи содержимого файла «agent.properties», или

  • найдите другой способ получить свойства вашего кода, которые вообще не связаны с чтением файла.

Пример последнего может передать свойства в файле в качестве аргументов командной строки или поместить файл в файл JAR, чтобы вы могли прочитать его как ресурс (по модулю изолированной программной среды безопасности, не блокируя это также).

Но нужно сказать, что в файле JAR есть что-то странное, что не позволяет вам читать файлы на вашем собственном компьютере. Почему он это делает? Это домашнее задание ... о менеджерах безопасности, разрешениях и т. Д.?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...