能够删除没有权限的文件

问题描述 投票:0回答:1

尽管Tomcat用户没有删除权限,为什么我能够在Java代码中删除文件?

我的服务器正在运行以下代码,如果存在,则删除并重新创建文件:

File fileCSV = new File(filePath);
    try {
        if (fileCSV.exists()) {
            fileCSV.delete();
        }
        fileCSV.createNewFile();
    } catch (IOException ex) {
        throw new FooImportException("Error creating new file");
    }

尽管服务器使用的用户没有删除权限,但能够删除文件 - 只有读写权限。

enter image description here

我确信这些是相关权限,因为代码在文件创建行上失败而没有“创建文件/写入数据”权限。但是,如果缺少“删除”权限,它在删除行上不会失败。这可能是什么原因?

java tomcat permissions delete-file windows-server-2012-r2
1个回答
1
投票

根据JavaDocs for File#delete

public boolean delete() 删除此抽象路径名表示的文件或目录。如果此路径名表示目录,则该目录必须为空才能被删除。 请注意,Files类定义了delete方法,以便在无法删除文件时抛出IOException。这对于错误报告和诊断无法删除文件的原因很有用。

返回: true当且仅当文件或目录被成功删除时; false否则 抛出: SecurityException - 如果存在安全管理器且其SecurityManager.checkDelete(java.lang.String)方法拒绝删除对文件的访问权限

因此,当文件无法删除时,File#delete实际上不会抛出Exception,而是根据操作的成功返回boolean

如果Exception对你很重要,那么你应该使用Files#delete代替。

重要的是要注意 - 这只能解决基于可用代码的“为什么不失败”的问题,而不是基于可用文件权限的“它会失败”的问题

© www.soinside.com 2019 - 2024. All rights reserved.