2012-06-11 13 views
5

java rmiで開発されたデスクトップアプリケーションを実行しようとしています。私はEclipseでこのアプリケーションを実行しようとしている間、私は次のエラーが発生しています。いずれにしても、事前に感謝してください。スレッド "main"の例外java.security.AccessControlException:アクセスが拒否されました(java.util.PropertyPermission * read、write)

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) 

ここにコードがあります。

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

答えて

10
  1. eclipseでアプリケーションを右クリックし、実行コンフィギュレーションをクリックします。
  2. 仮想マシンの引数を-Djava.security.policy =java.policy.appletと追加します。
  3. ファイルを作成し、java.policy.appletという名前を付けます。
  4. このファイルに次の行を追加します。

    grant 
    { 
        permission java.security.AllPermission; 
    }; 
    
  5. 保存してアプリケーションを実行します。

これにより、Javaアプリケーションにすべてのセキュリティ権限が付与されます。

2

セキュリティマネージャがインストールされていて、コードを実行するために.policyファイルに十分なアクセス許可を与えていません。例外は、どのパーミッションが不足しているかを示しますが、それ以上の可能性があります。 -Djava.security.debug = accessを指定してアプリケーションを実行すると、その他のセキュリティ上の問題を確認できます。

しかし、本当の質問はここにセキュリティマネージャーがありますか? RMIコードベース機能を使用している場合は、RMIの観点から、RMIサーバーでのみ必要です。それ以外の場合は削除することを検討する必要があります。

また、createRegistryの結果をガベージコレクションされない場所に保存する必要があります。静的変数に格納します。そして、あなたがそれをしたら、getRegistry()コールは冗長です。

+0

ありがとう、私はこのapplication.howを実行するためにEclipseを使用していますか?私はかなり新しいrmiです。もう一度おはようです。 – bhuvanpavan

+0

私はポリシーファイル 'grant { \tを作成しました//今はすべて許可します \t権限java.security.AllPermission; }; '同じ例外を与えるにもかかわらず...私はプロジェクトの下にそのポリシーファイルをbuildpathします。 – bhuvanpavan

+0

この問題は依然として解決されていません。誰もがそれを把握してください..........事前に感謝.. – bhuvanpavan

関連する問題