为什么在Java中使用java.security.SecurityManager可以读取任何文件?

时间:2018-07-16 10:44:38

标签: java java-io securitymanager

我只希望在Java程序中读写某些文件。因此,我使用java.security.SecurityManager来管理此问题,但这似乎并不令人满意。

Main.java文件在下面

import java.io.*;
import java.util.*;
public class Main {
    static private final String INPUT = "in.txt";
    public static void main(String args[]) throws Exception {
        FileInputStream instream = null;
        BufferedReader reader = new BufferedReader(new FileReader(INPUT));
        String tempString = null;
        while ((tempString = reader.readLine()) != null) {
            System.out.println(tempString);
        }
    }
}

和文件/opt/java.policy如下所示

grant {
    permission java.io.FilePermission "./out.txt", "write";
};

然后我跑

java -Xss64m -Xms16m -Xmx512m -Djava.security.manager -Djava.security.policy=/opt/java.policy Main

但是没有错误,输出就是in.txt。我尝试了其他文件并获得了相同的结果。为什么会这样?

1 个答案:

答案 0 :(得分:6)

来自Javadoc

  

请注意:代码始终可以从文件所在的同一目录(或该目录的子目录)读取文件;它不需要明确的许可。

这不是明确规定的。代码不在目录中:它是从当前工作目录中执行,这似乎是要执行的操作。