有什么办法可以完全禁用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或其他特权操作? – 2009-04-17 23:45:21
完整的命令行可能也很有用。 – 2009-04-17 23:46:35
您的虚拟机参数是否正确?你似乎有-Djava.security.policy ==? – 2009-04-18 00:09:52