0

RMI セキュリティ ポリシーを機能させるのに問題があります。サーバーとクライアントの両方に .policy ファイルがあり、それぞれが SecurityManager を実行しています。

クライアントを実行しようとすると、失敗します。私のポリシー ファイルはすべての atm を許可します。内容は次のとおりです。

grant { permission java.security.AllPermission };

JAR ファイルのルート ディレクトリに client.policy ファイルがあります (jar 外のポリシー ファイルでも実行してみました)。次に、これでクライアントを実行します。

java -jar PagePlanner.jar -Djava.security.policy=client.policy -Djava.rmi.codebase=http://192.168.0.88:2077/home/me/NetbeansProjects/PageServer/dist/PageServer.jar -Djava.security.debug=access

ポリシー ファイルとコード ベースへのパスを指定します。これらのいずれかが正しいかどうかはわかりません。また、どこかで読んだデバッグ スイッチを設定しようとしましたが、何が問題なのかについての追加情報が得られるはずですが、違いはないようです。クライアントを実行したときの出力は次のとおりです。

Exception in thread "main" java.security.AccessControlException: access denied (java.awt.AWTPermission setWindowAlwaysOnTop)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.awt.Window.setAlwaysOnTop(Window.java:2038)
    at gui.LoginForm.<init>(LoginForm.java:59)
    at main.Main.main(Main.java:21)

その時点から、クライアントはハングアップします。ここで私が間違っていることはありますか?サーバー側のポリシー設定はほとんど同じです。それが役立つ場合は、詳細を投稿できます。

乾杯。

4

1 に答える 1

0

-Djava.security.debug=access,failure を指定してクライアントを実行します。ほとんどの場合、.policy ファイルが見つかりません。

ところで、クライアントに独自の抽象クラス/インターフェースの実装があり、サーバーがそれらを認識していない限り、クライアントにコードベースを設定する必要はありません。コードベースは通常、クライアントとレジストリにダウンロードされるクラスに注釈を付けるために、サーバーでのみ設定されます。

于 2010-09-09T23:58:16.827 に答える