5

以下のコードを使用してコンソールからユーザー入力を読み取るコードがあります。

Console console = System.console();
String input = console.readLine();

ただし、このコードは、すべてのアクションの権限がポリシー ファイルによって制御される、非常に安全な環境で実行する必要があります。

そこで、ポリシーファイルを使用してJavaコードのテストを行いました

grant codeBase "file:/myjar.jar" {
   permission java.security.AllPermission;
};

に許可を与えるためにどの許可を使用すればよいかわかりませんconsole.readLine()

4

1 に答える 1

3

System.consoleを有効にして JVM で使用している場合SecurityManagerは、次の RuntimePermissions が必要です。

permission java.lang.RuntimePermission "readFileDescriptor";
permission java.lang.RuntimePermission "writeFileDescriptor";

なんで?

およびファイル記述子 (0System.inSystem.out1、2 は を表すSystem.err) は、すでに JVM に対して開かれています。は、メソッドSecurityManagerを介して開いているファイル記述子への書き込みアクセス権を持っていることを確認し、同様にcheckWrite(FileDescriptor fd)メソッドを介して読み取りアクセス権を持っていることを確認しcheckRead(FileDescriptor fd)ます。これらのRuntimePermissionメソッドに必要なものは、javadocs にリストされています。

「writeFileDescriptor」は不必要に見えるかもしれませんが、Console オブジェクトを初期化するために必要です (少なくとも Oracle Java 7 ランタイムでは)。

于 2012-10-30T11:56:10.737 に答える