我有一些代码使用下面的代码从控制台读取用户输入.
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().
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 运行时)。