cro*_*umb 5 java permissions tomcat9
我发现 Tomcat 8 和 Tomcat 9 之间的文件权限发生了变化,我不知道如何解决它。
我有这样的代码,其中 inputStream 是我提供给这个例程的东西,而 redirectStream 是一个函数,它只使用 BufferedInput 和 BufferedOutput 流从一个流读取到另一个流。
Path path = "/some/example/path/to/a/file";
Files.createDirectories(path.getParent());
redirectStream(inputStream, new FileOutputStream(path.toFile());
在 Tomcat8 中执行这段代码后,目录和文件的权限将与用户的 umask (0022) 匹配。那就是目录将具有drwxr-xr-x,文件将具有-rw-r--r--. 由于它正在写入的这些文件随后可被 Internet 访问,因此需要全局读取标志。
但是在 Tomcat9 下,相同的代码分别给出了drwxr-x---和-rw-r-----,因此在互联网上是不可见的。我尝试了两件事。一个我在我的 tomcat 启动脚本中明确地将 umask 设置为 0022 只是为了确保它是无效的。第二种是在代码中显式设置权限以尝试强制问题。这修复了文件权限但不是目录权限,下面是更新的代码。
Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP_EXECUTE);
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.createDirectories(path.getParent(), PosixFilePermissions.asFileAttribute(perms));
redirectStream(inputStream, new FileOutputStream(path.toFile());
perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.OTHERS_READ);
Files.setPosixFilePermissions(fullPath, perms);
Run Code Online (Sandbox Code Playgroud)
这实际上修复了文件的文件权限,而不是目录的文件权限。我已经在 Tomcat 之外测试了代码,因此知道它可以工作。但是出于某种原因,Tomcat9 的环境以某种方式使目录仍然获得受限权限。
这里有什么想法吗?
| 归档时间: |
|
| 查看次数: |
5068 次 |
| 最近记录: |