在java中读取System.in的权限

Jij*_*joy 5 java security

我有一些代码使用下面的代码从控制台读取用户输入.

Console console = System.console();
String input = console.readLine();
Run Code Online (Sandbox Code Playgroud)

但是,此代码应在非常安全的环境中运行,其中每个操作的权限都通过策略文件控制.

所以我用策略文件测试了java代码

grant codeBase "file:/myjar.jar" {
   permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)

我不知道,我应该用什么许可来授予权限console.readLine().

Vin*_*lds 3

System.console如果您在启用了该功能的 JVM 中使用SecurityManager,则需要以下运行时权限:

permission java.lang.RuntimePermission "readFileDescriptor";
permission java.lang.RuntimePermission "writeFileDescriptor";
Run Code Online (Sandbox Code Playgroud)

为什么?

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

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