有没有完全禁用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");
}
输出:
开始 [db4o 7.4.68.12069 2009-04-18 00:21:30] AccessibleObject#setAccessible() 不可用。私有字段无法存储。 检索到的 (0): 完成
此线程建议修改 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 个小时试图解决这个问题,但没有任何想法如何使其工作。 感激任何帮助。