2016-05-27 13 views
0

java.security.AccessControlExceptionに関する提案が必要ですが、次のコードを実行するときに発生します。 (私はここに同様の質問に相談し、それを動作させるために成功しませんでしたしている)java.security.AccessControlExceptionを解決するには

ここでは、私のサーバーのコードは次のとおりです。

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

だから私:

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

そして、ここでは私のクライアントのコードがあります

0123:私は、私が持っているようにポリシーファイルを渡すために持っていることを見つけ

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

ました

grant { 
    permission java.security.AllPermission;}; 

どのようにですか?他の提案はありますか?

+1

[解決方法[java.security.AccessControlException?](http://stackoverflow.com/questions/14650010/how-to-solve-java-security-accesscontroceptionception)の可能な複製 – Jaimesh

答えて

2

すべてのアクセス許可ではなく、ソケットのアクセス許可のみを許可することができます(これはセキュリティ上のリスクの可能性があります)。したがって、のようなもの:JRE環境内のコマンドライン

java -Djava.security.policy=mypolicyfile PrintSiteInfo 

2の引数として

1)):それを行うには

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

二つの方法

を追加JRE_HOME/lib/security/java.policyファイルのアクセス許可

1

セキュリティ管理者を取り除くエル。 RMIコードベース機能を使用している場合を除き、必要はありません。

関連する問題