2012-06-11 10 views
5

Estoy tratando de ejecutar una aplicación de escritorio que se desarrolla en java rmi. Mientras intento ejecutar esta aplicación en eclipse, recibo un error de seguimiento. Por favor, cualquiera me ayude de antemano.Excepción en el hilo "principal" java.security.AccessControlException: acceso denegado (java.util.PropertyPermission * leer, escribir)

Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write) 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source) 
    at java.lang.System.getProperties(Unknown Source) 
    at .HeadOfficeManager.Manager.main(Manager.java:103) 

Aquí está el código.

public static void main(String args[]) 
{ 
    Manager frame = new Manager(); 
    frame.setVisible(true); 
    // frame.show(); old 1.4 

    // Create and install a security manager 
    if (System.getSecurityManager()== null) 
    { 
     System.setSecurityManager(new RMISecurityManager()); 
    } 
    try 
    { 
     Properties prop = System.getProperties(); 
     String httpPath = prop.getProperty("HTTPPath"); 
     new ClassFileServer(80, httpPath); 
    } 
    catch (IOException e) 
    {} 

    try 
    { 
     java.rmi.registry.LocateRegistry.createRegistry(1099); 
     System.out.println("RMI registry ready."); 
    } 
    catch (Exception e) 
    { 
     System.out.println("Exception starting RMI registry:"); 
     e.printStackTrace(); 
    } 
    try 
    { 
     RMIHandler = new ManagerRMIHandler(); 

     // Bind the remote object's stub in the registry 
     Registry registry = LocateRegistry.getRegistry(); 
     registry.rebind("HeadOfficeManager", RMIHandler); 

     System.err.println("Server ready"); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Server exception: " + e.toString()); 
     e.printStackTrace(); 
    } 

Respuesta

10
  1. Haga clic con el botón derecho en la aplicación en eclipse y haga clic en ejecutar configuraciones.
  2. Agregue argumentos de máquina virtual como -Djava.security.policy =java.policy.applet.
  3. Crea un archivo, nómbralo como java.policy.applet.
  4. Agregue las siguientes líneas en ese archivo.

    grant 
    { 
        permission java.security.AllPermission; 
    }; 
    
  5. Guárdalo y ejecuta la aplicación.

Esto dará todos los permisos de seguridad a su aplicación Java.

2

Ha instalado un SecurityManager y no se ha dado suficientes permisos en su archivo .policy para ejecutar su código. La excepción le indica qué permiso falta, pero probablemente haya más. Ejecute su aplicación con -Djava.security.debug = acceso, sin ver qué otros problemas de seguridad hay.

Pero la verdadera pregunta aquí es ¿por qué el gerente de seguridad? Solo lo necesita en un servidor RMI, desde el punto de vista de RMI, si está utilizando la función de base de código RMI. De lo contrario, debería considerar eliminarlo.

También debe almacenar el resultado de createRegistry en algún lugar donde no se recolectará basura, p. Ej. en una variable estática. Y una vez que haya hecho eso, la llamada getRegistry() es redundante.

+0

gracias, estoy usando eclipse para ejecutar esta aplicación. ¿Cómo puedo verificar los permisos en eclipse? soy bastante nuevo para rmi ... gracias una vez más – bhuvanpavan

+0

he creado el archivo de políticas 'grant { \t // Permitir todo por ahora \t permission java.security.AllPermission; }; ' a pesar de que da la misma excepción ... construyo ese archivo de política bajo proyecto. – bhuvanpavan

+0

todavía este problema no está resuelto. ¿Alguien puede por favor resolverlo .......... gracias de antemano .. – bhuvanpavan

Cuestiones relacionadas