Доступ к Java FileOutputStream запрещен для подписанного апплета

Я разрабатываю Java-апплет, который должен получить доступ к файловой системе посетителя, поэтому я сжал свой файл .class в файл .jar с самозаверяющим сертификатом, когда я открываю файл call.html в своем браузере (файл, в котором находится HTML-тег <applet> ), я принимаю всплывающее окно безопасности, тогда я получаю эту ошибку в консоли Java:

java.security.AccessControlException: доступ запрещен (запись java.io.FilePermission output.txt)

Я использую FileInputStream и FileOutputStream. FileInputStream работает, а FileOutputStream нет, почему?

Вот мой код:

try {
      AccessController.doPrivileged(
          new PrivilegedExceptionAction() {              
              @Override 
              public Object run() throws FileNotFoundException {
                  outFile = new FileOutputStream("output.txt");
                  inFile = new FileInputStream("input.txt");
                  return "test";
              }
          }
      );
} catch (PrivilegedActionException e) {
    throw (FileNotFoundException) e.getException();
}

Я пробовал много способов сделать привилегированные действия, FileInputStream всегда работает, а FileOutputStream - нет. output.txt не является файлом только для чтения.


person user1376701    schedule 05.05.2012    source источник
comment
Может быть, вы пишете в каталог только для чтения? Проверьте полный путь и разрешения файловой системы.   -  person jontro    schedule 05.05.2012
comment
Я бы предложил записать файл в подкаталог user.home. Это место должно быть разрешено для надежного приложения. написать. Что на выходе? (Например, результаты игр, платежная запись клиента..)   -  person Andrew Thompson    schedule 05.05.2012
comment
Каталог не находится в режиме только для чтения. Как получить доступ к user.home ? Netbeans показывает мне эту ошибку: Не удается найти символ: пользователь.   -  person user1376701    schedule 05.05.2012
comment
Обновление: с помощью outFile = new FileOutputStream(System.getProperty("user.home")+"/output.txt"); я получаю эту ошибку: java.security.AccessControlException: доступ запрещен (чтение java.util.PropertyPermission user.home)   -  person user1376701    schedule 05.05.2012
comment
@ andrew-thompson andrew-thompson Я хочу временно поместить некоторые данные в файл output.txt, есть ли временное хранилище в песочнице Java, где я могу создать свой файл output.txt? Я попробовал `new FileOutputStream(output.txt), но -> ошибка.   -  person user1376701    schedule 05.05.2012
comment
FileOutputStream(System.getProperty("user.home")+"/output.txt"); Попробуйте изменить это на File userHome = new File(System.getProperty("user.home")); File output = new File(userHome, "output.txt"); FileOutputStream(output);   -  person Andrew Thompson    schedule 05.05.2012
comment
Все еще получаю эту ошибку: java.security.AccessControlException: доступ запрещен (читается java.util.PropertyPermission user.home). Похоже, что у моего апплета нет разрешения на доступ к файловой системе, это странно, потому что я подписал его и принимаю всплывающее окно. при просмотре файла HTML.   -  person user1376701    schedule 05.05.2012
comment
Я забыл сказать вам, что при запуске я получил это сообщение об ошибке: docs.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html, конечно, я нажимаю «Нет», но привилегии, похоже, не предоставляются. После нескольких поисков я так и не понял, что такое смешанный код? (Извините, я новичок в Java ^^)   -  person user1376701    schedule 06.05.2012


Ответы (1)


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

Создание файла политики

Инструмент политики — это инструмент безопасности платформы Java 2 для создания файлов политики. Учебник по Java по управлению апплетами подробно объясняет, как использовать инструмент политики. Вот файл политики, необходимый для запуска апплета. Вы можете использовать инструмент «Политика», чтобы создать его, или скопировать приведенный ниже текст в файл ASCII.

grant {
       permission java.util.PropertyPermission 
   "user.home", "read";
       permission java.io.FilePermission 
   "${user.home}/text.txt", "read,write";
     };

Вот полная ссылка для разрешений апплетов http://java.sun.com/developer/onlineTraining/Programming/BasicJava1/data.html

person Ibraheem Osama    schedule 05.05.2012
comment
Спасибо за ответ, но я не хочу использовать файлы политики, потому что я хочу, чтобы мой апплет использовался посетителями моего сайта. - person user1376701; 05.05.2012