подписанный Java-апплет вызывает AccessControlException при записи файлов в локальную систему - PullRequest
2 голосов
/ 12 июля 2011

У меня есть Java-апплет с цифровой подписью.
Мне нужно иметь возможность вызывать функцию из JavaScript, которая записывает XML-файл в папку пользователя.

У меня есть код в функции инициализации апплета, которая создает подпапку, создает файл и добавляет к нему. Это работает без ошибок. Когда тот же код находится внутри функции (ниже), которая вызывается непосредственно из javascript, возникает исключение контроля доступа:

public boolean createLocalXMLFile(String XML) {
    String path = BaseDirectory.baseDirectory + "\\TestFolder";
    try {
        boolean status;
        status = new File(path).mkdir();

        UUID fName = UUID.randomUUID(); 

        FileWriter fstream = new FileWriter(path + "\\"+fName+".xml");
        BufferedWriter out = new BufferedWriter(fstream);
        out.write(XML);
        //Close the output stream
        out.close();

        return true;
    }catch (Exception ex) {
        System.out.println("createXMLError \n"+ex.toString());
        return false;
    }

}

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

Ошибка консоли Java java.security.AccessControlException: доступ запрещен (java.io.FilePermission C: \ Users \ Richard \ Hytec \ AppStore \ 0d927ab7-74ba-449a-9db4-98e62cd0f53b.txt запись)

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

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

Чтобы запустить код с разрешениями вашего апплета, поместите критический код в AccessController.doPrivileged(...). Конечно, сначала проверьте, что это не может сделать ничего вредоносного, даже если он вызван вредоносным кодом.

0 голосов
/ 12 июля 2011

Сначала убедитесь, что для вашего policy файла установлены соответствующие разрешения. Вы можете установить его на all-permissions для отладки и убедиться, что это не ваша проблема.

В какой операционной системе вы испытываете эту проблему? Вы получаете ту же проблему с XP? Причина, по которой я спрашиваю, заключается в том, что даже подписанные апплеты с полными разрешениями, предоставленными файлом политики, не имеют полного доступа к файлу на рабочей станции под управлением Windows Vista или Windows 7.

Это связано с концепцией уровней целостности папок, даже когда UAC выключен, http://msdn.microsoft.com/en-us/library/bb625962.aspx

Локальное хранилище апплетов по умолчанию имеет уровень целостности, установленный на Low, что означает, что оно изначально недоверено, и процессы, выполняющиеся из этих каталогов, могут иметь только полные разрешения для файлов и процессов, работающих в других каталогах целостности Low. Системные папки имеют целостность High, а другие папки по умолчанию имеют целостность Medium.

Все они могут быть изменены к счастью, и есть бесплатный инструмент командной строки, который может помочь вам изменить уровень целостности папок без использования административных инструментов панели управления. http://www.minasi.com/apps/

Надеюсь, это все поможет.

...