¿Hay alguna manera de deshabilitar completamente el administrador de seguridad de Java?
Cómo deshabilitar el administrador de seguridad de Java?
Estoy experimentando con el código fuente de db4o. Utiliza la reflexión para persistir objetos y parece que el administrador de seguridad no permite que la reflexión lea y escriba campos privados o protegidos.
Mi código:
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");
}
Salida:
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 sugiere modificar el archivo java.policy para permitir la reflexión, pero no parece funcionar para mí. JVM
estoy empezando con argumentos
-Djava.security.manager -Djava.security.policy==/home/pablo/.java.policy
archivo de política de modo específico será el único archivo de política utilizada
El archivo tiene el siguiente aspecto:
grant { permission java.security.AllPermission; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; };
yo pasamos 3 últimas horas de esto y no tengo ninguna idea de cómo hacer que esto funcione. Cualquier ayuda apreciada.
¿Ha intentado llamar a setAccessible u otras acciones privilegiadas desde su propio código? –
La línea de comando completa también puede ser útil. –
¿Son los argumentos de su VM correctos? ¿Parece tener -Djava.security.policy ==? –