una significa seguridad que por podido iniciar hacer error ejecucion desbloquear cómo cuando control configuracion bloqueado bloqueada autofirmada aplicación aplicacion aparece airview java security reflection db4o

significa - ¿Cómo deshabilitar el administrador de seguridad de Java?



que significa aplicacion bloqueada por la seguridad de java (3)

¿Hay alguna manera de deshabilitar completamente el administrador de seguridad de Java?

Estoy experimentando con el código fuente de db4o. Utiliza la reflexión para persistir los 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


Este hilo sugiere modificar el archivo java.policy para permitir la reflexión, pero no parece funcionar para mí.

Estoy empezando JVM con argumentos
-Djava.security.manager -Djava.security.policy==/home/pablo/.java.policy
el archivo de políticas especificado será el único archivo de políticas utilizado

El archivo se ve así:

grant { permission java.security.AllPermission; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; };

Pasé las últimas 3 horas en esto y no tengo ninguna idea de cómo hacer que esto funcione. Cualquier ayuda apreciada.


¿Realmente tiene dos signos ''='' en la opción de línea de comando java.security.policy ? Eso no funcionará. Asegúrese de que está configurando la propiedad como

-Djava.security.policy=/home/pablo/.java.policy

Para deshabilitar realmente el SecurityManager , simplemente dejar de lado la propiedad del sistema java.security.manager debería ser suficiente.

Actualización: Cuando estaba leyendo la documentación de los archivos de políticas para obtener más información sobre la sintaxis "==", noté que a menos que el archivo de políticas se encuentre en el directorio de trabajo actual, debe especificarse como una URL (incluido el esquema). ¿Ha intentado prefijar la ruta de la política con el esquema "file:"?

También me desconcertó porque (asumiendo que se está ejecutando como usuario "pablo"), parece que esa política debería cargarse de forma predeterminada desde su directorio de inicio, por lo que no debería necesitar especificarla. Por otro lado, si no se está ejecutando como usuario "pablo", tal vez el archivo no sea legible.


Encontré este ejemplo de cómo hacer que los campos y métodos privados sean accesibles a su código. Básicamente, se destina al uso de Field.setAccessible (true) y Method.setAccessible (true)

Ejemplo de campo:

Field privateStringField = PrivateObject.class. getDeclaredField("privateString"); privateStringField.setAccessible(true);

Ejemplo de método:

Method privateStringMethod = PrivateObject.class. getDeclaredMethod("getPrivateString", null); privateStringMethod.setAccessible(true);

También puede considerar el uso de Groovy con su código Java, ya que (actualmente) elude gran parte de las restricciones de nivel de acceso del código Java. Aunque, esta publicación en el tablero de mensajes parece sugerir que esta "característica" puede cambiar en futuras versiones de Groovy .


Puedes intentar agregar esto al main () de tu programa:

System.setSecurityManager(null);

Trabajé para mí para una aplicación WebStart "confiable" cuando tenía problemas con el administrador de seguridad. No estoy seguro de si funcionará para su caso de db4o, pero podría valer la pena intentarlo.

EDITAR: No estoy sugiriendo que esta es una solución general para los problemas del administrador de seguridad. Solo lo propuse como una forma de ayudar a depurar el problema del póster original. Claramente, si desea beneficiarse de un administrador de seguridad, entonces no debe desactivarlo.