我发现在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--”。由于这些文件随后可以被互联网访问到,因此全局读标志是必要的。
但是,在Tomcat9下,相同的代码会产生“drwxr-x---”和“-rw-r-----”结果,因此不可见于互联网。我尝试过两种方法,一种是在我的tomcat启动脚本中显式设置umask为0022,以确保这是我想要的效果,但没有效果。第二个方法是在代码中显式设置权限来强制解决这个问题。这修复了文件权限,但未修复目录权限,以下是更新后的代码。
实际上,这个代码只修复了文件的权限,而没有修复目录的权限。我在Tomcat之外测试过该代码,确信它有效。但由于某种原因,在Tomcat9环境中,目录仍然保持受限制的权限。
你有什么想法吗?
我有一个类似下面的代码,其中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--”。由于这些文件随后可以被互联网访问到,因此全局读标志是必要的。
但是,在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);
实际上,这个代码只修复了文件的权限,而没有修复目录的权限。我在Tomcat之外测试过该代码,确信它有效。但由于某种原因,在Tomcat9环境中,目录仍然保持受限制的权限。
你有什么想法吗?