2012-06-11 11 views
5

Sto cercando di eseguire un'applicazione desktop che è sviluppata in Java RMI. Mentre sto cercando di eseguire questa applicazione in eclissi, ricevo un errore in seguito. Per favore qualcuno mi aiuti grazie in anticipo.Eccezione in filetto java.security.AccessControlException "principale": accesso negato (java.util.PropertyPermission * leggere, scrivere)

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) 

ecco il codice.

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(); 
    } 

risposta

10
  1. Fare clic con il tasto destro del mouse sull'applicazione in eclissi e fare clic su Esegui configurazioni.
  2. Aggiungi argomenti macchina virtuale come -Djava.security.policy =java.policy.applet.
  3. Creare un file, il nome come java.policy.applet.
  4. Aggiungere le righe sottostanti in tale file.

    grant 
    { 
        permission java.security.AllPermission; 
    }; 
    
  5. Salva esso ed eseguire l'applicazione.

Fornisce tutte le autorizzazioni di sicurezza per l'applicazione Java.

2

è stato installato un SecurityManager e non hanno dato se stessi autorizzazioni sufficienti nel file .policy per eseguire il codice. L'eccezione ti dice quale autorizzazione manca, ma probabilmente ce ne sono ancora di più. Esegui la tua applicazione con -Djava.security.debug = accesso, non riesci a vedere quali altri problemi di sicurezza ci sono.

Ma la vera questione qui è il motivo per cui il responsabile della sicurezza? Ne hai bisogno solo in un server RMI, dal punto di vista RMI, se stai utilizzando la funzione di base del codice RMI. Altrimenti dovresti considerare di eliminarlo.

Inoltre è necessario memorizzare il risultato di createRegistry da qualche parte dove non sarà garbage collection, per esempio in una variabile statica. E una volta fatto, la chiamata getRegistry() è ridondante.

+0

grazie, sto usando Eclipse per eseguire questo application.how posso fare che verificare le autorizzazioni in Eclipse ?? sono abbastanza nuovo per rmi ..thanks ancora una volta – bhuvanpavan

+0

ho creato il file di criteri 'grant { \t // Permetti tutto per ora \t permesso java.security.AllPermission; }; ' anche se ha la stessa eccezione ... io costruisco quel file di politica sotto progetto. – bhuvanpavan

+0

ancora questo problema non è risolto. qualcuno può per favore capirlo .......... grazie in anticipo .. – bhuvanpavan

Problemi correlati