9

私は論理ゲームである人工知能プロジェクトに取り組んでおり、管理者として機能するネットワーク上のサーバーに接続し、1 人ずつプレイを開始する 2 人のユーザーを対象としています。

接続を作成するために、localhost:8000 をリッスンし、到着時にクライアントにチーム値を割り当てるサーバー コードがあります。接続後、クライアントは管理者の制御下で移動します。

問題は、コードをブラウザーで動作させようとすると、次のエラーで失敗することです。

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 connect,resolve)

独自のポリシーを作成しましたが、最初にプロジェクト フォルダー ( file:///home/xxx/projects/-) のコードベースにソケット アクセス許可のみを付与し、それが機能しなかった後、すべてのコードベースからすべての許可を付与しました。ポリシー ファイルを、ホーム ディレクトリと、アプレット コードが存在する同じディレクトリの両方に配置しようとしました。

ヒントをいただければ幸いです。

4

5 に答える 5

11

デフォルトでは、ホームディレクトリで .java.policy という名前のファイルを探すと思います

ファイル /lib/security/java.security をチェックして、その場所を確認できます。policy.url.n という名前のキーを確認します

于 2010-04-10T09:56:15.597 に答える
3

このコマンドラインオプションを使用して、セキュリティポリシーファイルの場所を設定できます

-Djava.security.policy=policyfilepath

javaコマンドで。

または、System.setProperty()手順を使用してこのプロパティを設定することもできます。

于 2012-09-27T00:31:02.073 に答える
0

JRE がある場所にポリシー ファイルを配置します。

たとえば、私のポリシー ファイルは C:\Program Files\Java\jre1.6.0_01\lib\security にあります。

于 2010-04-10T09:54:17.873 に答える
0

同一生成元ポリシーを尊重することを強くお勧めします。セキュリティへの影響は、最良の場合でも必ずしも明らかではありません。また、標準のアクセス許可を持つアプレットは、使いやすさが向上し、保守も容易になるはずです。

于 2010-04-10T12:11:39.450 に答える
0

特定の JAR (コードベース) にアクセス許可を付与する場合、これは、スレッドの開始からメソッド呼び出しまでの実行スタック全体がそのコードベース/保護ドメインにある場合にのみ機能します。

メソッドがライブラリであり、操作に安全にアクセスできることが確実な場合は、Priveledged Block を使用できます。これにより、基本的に、ブロックを呼び出すスタックの部分がアクセス計算で考慮されないことが保証されます。

ここで説明されているように、特権ブロック:

http://docs.oracle.com/javase/6/docs/technotes/guides/security/doprivileged.html

こんにちはベルント

于 2011-12-22T22:35:32.307 に答える