Есть ли способ полностью отключить диспетчер безопасности Java?
Как отключить диспетчер безопасности Java?
Я экспериментирую с исходным кодом db4o. Он использует отражение для сохранения объектов, и кажется, что диспетчер безопасности не позволяет отражать чтение и запись частных или защищенных полей.
Мой код:
public static void main(String[] args) throws IOException {
System.out.println("start");
new File(DB_FILE_NAME).delete();
ObjectContainer container = Db4o.openFile(DB_FILE_NAME);
String ob = new String("test");
container.store(ob);
ObjectSet result = container.queryByExample(String.class);
System.out.println("retrieved (" + result.size() + "):");
while(result.hasNext()) {
System.out.println(result.next());
}
container.close();
System.out.println("finish");
}
Выход:
start [db4o 7.4.68.12069 2009-04-18 00:21:30] AccessibleObject#setAccessible() is not available. Private fields can not be stored. retrieved (0): finish
This thread предлагает модифицировать файл java.policy, чтобы отражение, но это не похоже на работу для меня.
Я начинаю JVM с аргументами
-Djava.security.manager -Djava.security.policy==/home/pablo/.java.policy
так указанный файл политики будет только файл политики используется
файл выглядит следующим образом:
grant { permission java.security.AllPermission; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; };
я провел последние 3 часа на это и не имеет никаких идей, как сделать эту работу. Любая помощь приветствуется.
Вы пробовали вызывать setAccessible или другие привилегированные действия из своего собственного кода? –
Полная командная строка также может быть полезна. –
Правильны ли ваши аргументы VM? У вас, похоже, есть -Djava.security.policy ==? –