我有一些代码正在使用以下代码从控制台读取用户输入。
Console console = System.console();
String input = console.readLine();
但是,此代码应在非常安全的环境中运行,其中每个操作的权限都通过策略文件控制。
所以我用策略文件
测试了java代码grant codeBase "file:/myjar.jar" {
permission java.security.AllPermission;
};
我不知道我应该使用哪种权限授予console.readLine()
。
答案 0 :(得分:3)
如果您在启用了System.console
的JVM中使用SecurityManager
,则需要以下RuntimePermissions:
permission java.lang.RuntimePermission "readFileDescriptor";
permission java.lang.RuntimePermission "writeFileDescriptor";
<强>为什么吗
System.in
和System.out
文件描述符(0和1,其中2表示System.err
)已经对JVM开放。 SecurityManager
通过checkWrite(FileDescriptor fd)
method验证您对打开的文件描述符具有写入权限,同样通过checkRead(FileDescriptor fd)
method验证您具有读取权限。这些方法所需的RuntimePermission
列在javadocs中。
虽然“writeFileDescriptor”可能看起来多余,但是有必要初始化Console对象(至少在Oracle Java 7运行时中)。