2017-12-22 13 views
0

いくつかのRMI呼び出しを実行するJavaアプリケーションを出荷しようとしています。Java Shipping JARとSecurityManagerポリシーファイル

私はこれをJARファイルとして出荷する必要があります(要件であり、まわりにはありません)。

ここで、ソケットとRMI接続のようなものを許可するためには、SecurityManagerとPolicyファイルが必要です。

このポリシーファイルをjarファイルに入れて、JAR内部からポリシーパスを設定したいとします。私が持っている、私は私のPC上のパスにしてJAR(IntelliJの「アプリケーション」)なしでコードを実行するために、パスを変更する場合

public static void main(String[] args) 
{ 
     System.setProperty("java.security.policy","jar:file:/Policies/Server.policy"); 
     Policy.getPolicy().refresh(); 

     ... /* All other code */ 

} 

今のところ、これは私のコードは次のようになります何の問題私は私のJARを実行しようとすると、私は次の例外を取得し、自分のアプリケーションを起動する:誰が何このパスを教えてくださいすることができ

Exception in thread "main" java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:2000" "listen,resolve") 

私は設定していますパスを感じるんだが、間違っていませんすべき?

+0

ファイルの内容をJARから実行すると、その内容を読み込んで印刷できますか? – amitmah

答えて

1

私を次のように私のコードを変更することで、この問題を解決することができました:

public static void main(String[] args) 
{ 
    boolean quit = false; 

    String serverPolicyPath = "/Policies/Server.policy"; 
    URL serverPolicyURL = Main.class.getResource(serverPolicyPath); 

    if (serverPolicyURL == null) 
    { 
     System.err.println("getResource returned NULL"); 
     return; 
    } 

    System.setProperty("java.security.policy",serverPolicyURL.toString()); 
    Policy.getPolicy().refresh(); 

    ... 

代わりに、手動でパスを把握しようと、私はJavaが私のためにそれを修正してみましょう。

関連する問題