Параметры политики Java не работают для FilePermission

Наш файл политики Java раньше был просто:

grant {
  permission java.security.AllPermission;
};

Я пытаюсь сделать наше приложение более безопасным, чем просто предоставлять все каждому. У меня это работает хорошо, за исключением проблем с разрешением файлов.

Ошибка, которую я сейчас получаю:

java.security.AccessControlException: access denied (java.io.FilePermission \\server.log write)

Я пробовал так много комбинаций вещей, таких как:

permission java.io.FilePermission "\\\\server.log", "write";
permission java.io.FilePermission "C:\\Temp\\logs\\server.log", "write";
permission java.io.FilePermission "\\server.log", "write";
permission java.io.FilePermission "${TEMP}${/}-", "write";
permission java.io.FilePermission "*", "read,write";

Единственное, что я могу заставить его работать, это использовать:

grant {
  permission java.security.AllPermission;
};

Я получаю сообщение об ошибке "java.io.FileNotFoundException: \server.log (неверный синтаксис имени файла, имени каталога или метки тома)" при использовании (даже если файлы существуют):

permission java.io.FilePermission "<<ALL FILES>>", "write";

Просто интересно, есть ли у кого-нибудь еще идеи, чтобы попробовать. Я действительно не хочу прибегать к предоставлению всего лишь для того, чтобы получить права доступа к файлу, очевидно, я что-то упускаю.

РЕДАКТИРОВАТЬ:

Я только что понял, что, возможно, это ключ к лог-файлу:

log4j:ERROR setFile(null,false) call failed.

Может быть, мне нужны некоторые разрешения для этого конкретно? Покопаться в гугле сейчас....

2 ответа

В документации Oracle есть несколько примеров: https://docs.oracle.com/javase/8/docs/technotes/guides/security/spec/security-spec.doc3.html

permission java.io.FilePermission "myfile", "read,write";
permission java.io.FilePermission "/home/gong/", "read";
permission java.io.FilePermission "/tmp/mytmp", "read,delete";
permission java.io.FilePermission "/bin/*", "execute";
permission java.io.FilePermission "*", "read";
permission java.io.FilePermission "/-", "read,execute";
permission java.io.FilePermission "-", "read,execute";
permission java.io.FilePermission "<<ALL FILES>>", "read";

permission java.io.FilePermission "c:\\temp\\foo", "read,write,delete")
\\this one works for me

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

permission java.io.FilePermission "C:\\folder\\*", "read, write";

Ты пытался permission java.io.FilePermission "file:${/}server.log", "read,write"?

Другие вопросы по тегам