2016-05-27 15 views
0

Ich brauche Vorschläge bezüglich der java.security.AccessControlException, bekomme ich bei der Ausführung des folgenden Codes. (Ich habe ähnliche Fragen hier konsultierte aber nicht den Erfolg, damit es funktioniert)So lösen Sie java.security.AccessControlException

Hier ist mein Server-Code:

public class GetPageInfos extends UnicastRemoteObject implements RemoteGetInfo{ 

    private static final String url="http://www.lemonde.fr/"; 
public class GetPageInfos extends UnicastRemoteObject implements RemoteGetInfo{ 
    private static final String url="http://www.lemonde.fr/"; 

    public GetPageInfos() throws RemoteException{   
    } 

    public String getSiteInfos() throws RemoteException { 
     Document doc; 
      try {     
       doc = Jsoup.connect(url).get(); 
       String title = doc.title(); 
       return "title is "+title;          
      } catch (IOException e) { 
       System.out.println("Faild! "+e.getMessage()); 
       return "not found"; 
      } 

    } 

    public static void main(String[] args){ 
     try { 

      GetPageInfos infos= new GetPageInfos(); 
      //System.setProperty("java.rmi.server.hostname","5lq04x1.gemalto.com"); 
      Naming.rebind("RemoteGetInfo", infos); 
      /*GetPageInfos obj=new GetPageInfos(); 
      RemoteGetInfo stub = (RemoteGetInfo) UnicastRemoteObject.exportObject(obj, 0); 
      Registry registry = LocateRegistry.getRegistry(); 
      registry.bind("RemoteGetInfo", stub); 
      */ 
      System.out.println("server ready"); 

     } catch (RemoteException e) { 
       System.out.println("GetPageInfos "+e.getMessage()); 
     } 
     catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Und hier ist mein Client-Code:

//RMI Client 
public class PrintSiteInfos { 

    public static void main(String arg[]) 
    { 

     System.setSecurityManager(new RMISecurityManager()); 

      try 
       { 

        /*String host=null; 
        Registry registry = LocateRegistry.getRegistry(host); 
        RemoteGetInfo stub = (RemoteGetInfo) registry.lookup("RemoteGetInfo"); 
        String response = stub.getSiteInfos(); 
        System.out.println(response); */ 
       RemoteGetInfo obj = (RemoteGetInfo) Naming.lookup("RemoteGetInfo");   
       System.out.println(obj.getSiteInfos()); 
       } 
       catch (Exception e) 
       { 
        System.out.println("PrintSiteInfos exception: " + e.getMessage()); 
        e.printStackTrace(); 
       } 
    } 
} 

I So bekam

exception: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve") 

ich fand, dass ich eine Richtliniendatei zu übergeben, die ich habe, wie:

grant { 
    permission java.security.AllPermission;}; 

Aber wie? Irgendwelche anderen Vorschläge?

+1

Mögliches Duplikat von [So lösen Sie java.security.AccessControlException?] (Http://stackoverflow.com/questions/14650010/how-to-solve-java-security-accesscontrolexception) – Jaimesh

Antwort

2

Sie dürfen nur der Socket-Berechtigung nicht alle Berechtigungen gewähren (was ein Sicherheitsrisiko darstellen könnte). So etwas wie:

grant { 
    permission java.net.SocketPermission "127.0.0.1:1099", "connect, resolve"; 
}; 

Zwei Möglichkeiten, es zu tun:

1) Als Argument in der Befehlszeile

java -Djava.security.policy=mypolicyfile PrintSiteInfo 

2) innerhalb der Umgebung JRE:

speichern Berechtigung in der Datei JRE_HOME/lib/security/java.policy

1

Entfernen Sie den Sicherheitsmanager er. Sie benötigen es nur, wenn Sie die RMI-Codebasisfunktion verwenden.

Verwandte Themen