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";

为什么?

和文件描述符(0 和 1,其中 2 表示System.in)已经对 JVM 开放。验证您是否具有通过该方法对打开的文件描述符的写访问权,并且类似地您是否具有通过该方法的读访问权。这些方法所需的内容列在 javadocs 中。System.outSystem.errSecurityManagercheckWrite(FileDescriptor fd)checkRead(FileDescriptor fd)RuntimePermission

虽然“writeFileDescriptor”可能显得多余,但它是初始化控制台对象所必需的(至少在 Oracle Java 7 运行时中)。

于 2012-10-30T11:56:10.737 回答