0

単純に 2 つの数値の合計を計算するサンプル RMI アプリケーションを作成しました。

私のserver.policyは次のようになります:

grant {
permission java.net.SocketPermission "123.4.567.890:1024-", "accept, resolve";
};

そして私のclient.policyは次のようになります:

grant codeBase "file:/C:/Users/user/Documents/My_Workspace/Project/RMI/-" {
permission java.net.SocketPermission "123.4.567.890:1024-", "connect, resolve";
};

ポリシー ファイルの構文に関するドキュメントを読み、ポート番号の後にダッシュを付けると、「このポート番号以上」を意味することを知りました。ポートについてはよくわかりませんが、server.policy からダッシュを除外すると、java.security.AccessControlExceptionランダムなポート番号 (50,000 から 65,000 の間のように見えます) が得られますが、client.policy からダッシュを除外すると、java.security.AccessControlExceptionポート番号1099が毎回犯人であるのと同じです。

RMI アプリケーションを正しく動作させるために、ポリシー ファイルにダッシュを入れなくても済むようにする方法があるかどうか疑問に思っています。

また、それが役立つ場合、または問題がある場合は、サーバー/クライアントでそれぞれ ポート1099createRegistry()とメソッドを指定しています。getRegistry()

4

1 に答える 1

0

がある。もしも:

  1. LocateRegistry.createRegistry() を介して、サーバー JVM 内からレジストリを開始します。
  2. ポート 1099 またはポート 0 を指定するか、ポート番号をまったく指定しないで、同じ JVM からすべてのリモート オブジェクトを構築またはエクスポートします。
  3. (1) または (2) のいずれにもソケット ファクトリがないか、すべてのソケット ファクトリに equals() メソッドの妥当な実装がある

すべてのリモート オブジェクトが同じポート (ポート 1099) を共有します。

しかし、なぜ .policy ファイルのダッシュはそれほど重要なのでしょうか?

于 2014-03-04T23:04:15.713 に答える