在java中读取System.in的权限

时间:2012-10-30 10:52:50

标签: java security

我有一些代码正在使用以下代码从控制台读取用户输入。

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

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

所以我用策略文件

测试了java代码
grant codeBase "file:/myjar.jar" {
   permission java.security.AllPermission;
};

我不知道我应该使用哪种权限授予console.readLine()

1 个答案:

答案 0 :(得分:3)

如果您在启用了System.console的JVM中使用SecurityManager,则需要以下RuntimePermissions:

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

<强>为什么吗

System.inSystem.out文件描述符(0和1,其中2表示System.err)已经对JVM开放。 SecurityManager通过checkWrite(FileDescriptor fd) method验证您对打开的文件描述符具有写入权限,同样通过checkRead(FileDescriptor fd) method验证您具有读取权限。这些方法所需的RuntimePermission列在javadocs中。

虽然“writeFileDescriptor”可能看起来多余,但是有必要初始化Console对象(至少在Oracle Java 7运行时中)。