Есть ли способ полностью отключить диспетчер безопасности 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
В этой теме предлагается изменить файл 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 часа, и у меня нет идей, как заставить это работать.
Любая помощь приветствуется.