模块  java.base
软件包  java.io

Class FilePermission

  • 实现的所有接口
    SerializableGuard

    public final class FilePermission
    extends Permission
    implements Serializable
    此类表示对文件或目录的访问。 FilePermission由路径名和对该路径名有效的一组操作组成。

    Pathname是授予指定操作的文件或目录的路径名。 以“/ *”结尾的路径名(其中“/”是文件分隔符, File.separatorChar )表示该目录中包含的所有文件和目录。 以“/ - ”结尾的路径名表示(递归地)该目录中包含的所有文件和子目录。 这样的路径名称为通配符路径名。 否则,它是一个简单的路径名。

    由特殊标记“<< ALL FILES >>”组成的路径名匹配任何文件。

    注意:由单个“*”组成的路径名表示当前目录中的所有文件,而由单个“ - ”组成的路径名表示当前目录中的所有文件,并且(递归地)包含当前目录中的所有文件和子目录目录。

    要授予的操作将以包含一个或多个逗号分隔关键字列表的字符串形式传递给构造函数。 可能的关键字是“读”,“写”,“执行”,“删除”和“读取链接”。 它们的含义定义如下:

    阅读许可
    写权限
    执行
    执行权限。 允许Runtime.exec 对应于SecurityManager.checkExec
    删除
    删除权限。 允许File.delete 对应于SecurityManager.checkDelete
    的readlink
    阅读链接权限。 允许通过调用readSymbolicLink 方法读取symbolic link的目标。

    在处理之前,actions字符串将转换为小写。

    授予FilePermissions时要小心。 考虑授予读取特别是对各种文件和目录的写访问权的含义。 写入操作的“<< ALL FILES >>”权限特别危险。 这授予了写入整个文件系统的权限。 这有效地允许的一件事是替换系统二进制文件,包括JVM运行时环境。

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

    从以下版本开始:
    1.2
    另请参见:
    PermissionPermissionsPermissionCollection
    • 构造方法详细信息

      • FilePermission

        public FilePermission​(String path,
                              String actions)
        使用指定的操作创建新的FilePermission对象。 path是文件或目录的路径名, actions包含以逗号分隔的列表,列出了在文件或目录上授予的所需操作。 可能的操作是“读取”,“写入”,“执行”,“删除”和“读取链接”。

        以“/ *”结尾的路径名(其中“/”是文件分隔符, File.separatorChar )表示该目录中包含的所有文件和目录。 以“/ - ”结尾的路径名表示(递归地)该目录中包含的所有文件和子目录。 特殊路径名“<< ALL FILES >>”匹配任何文件。

        由单个“*”组成的路径名表示当前目录中的所有文件,而由单个“ - ”组成的路径名表示当前目录中的所有文件,并且(递归地)表示当前目录中包含的所有文件和子目录。

        包含空字符串的路径名表示空路径。

        Implementation Note:
        在此实现中, jdk.io.permissionsUseCanonicalPath系统属性指示如何处理和存储path参数。

        如果system属性的值设置为true ,则path被规范化并存储为名为cpath的String对象。 这意味着相对路径转换为绝对路径,Windows DOS样式8.3路径扩展为长路径,符号链接解析为其目标等。

        如果系统属性的值被设置为falsepath被转换为Path命名对象npathnormalization 不执行规范化,这意味着不访问底层文件系统。 如果在转换过程中抛出InvalidPathException ,则此FilePermission将被标记为无效。

        在任何一种情况下,在规范化或规范化之前删除通配符path末尾的“*”或“ - ”字符。 它存储在单独的通配符标志字段中。

        该默认值jdk.io.permissionsUseCanonicalPath系统属性为false在此实现。

        参数
        path - 文件/目录的路径名。
        actions - 动作字符串。
        异常
        IllegalArgumentException - 如果操作为 nullnull空或包含除指定的可能操作之外的操作。
    • 方法详细信息

      • implies

        public boolean implies​(Permission p)
        检查此FilePermission对象是否“隐含”指定的权限。

        更具体地说,如果满足以下条件,则此方

        • p是FilePermission的一个实例,
        • p的动作是该对象动作的适当子集,并且
        • p的路径名由此对象的路径名隐含。 例如,“/ tmp / *”表示“/ tmp / foo”,因为“/ tmp / *”包含“/ tmp”目录中的所有文件,包括名为“foo”的文件。

        准确地说,一个简单的路径名意味着另一个简单的路径名,当且仅当它们相等时。 简单路径名从不暗示通配符路径名。 通配符路径名表示另一个通配符路径名,当且仅当前者暗示后者隐含的所有简单路径名时。 通配符路径名表示一个简单的路径名,当且仅当

        • 如果通配符标志为“*”,则简单路径名的路径必须在通配符路径名的路径中。
        • 如果通配符标志为“ - ”,则简单路径名的路径必须在通配符路径名的路径中递归。

        “<< ALL FILES >>”表示每隔一个路径名。 除“<< ALL FILES >>”本身外,没有路径名表示“<< ALL FILES >>”。

        Specified by:
        impliesPermission
        Implementation Note:
        如果jdk.io.permissionsUseCanonicalPathtrue ,一个简单cpath是一个通配符内cpath当且仅当从以前删除的基本名称(路径名的名称序列中的最后名称)后的剩余部分等于后者,简单cpath是递归内通配符cpath当且仅当前者以后者开头时。

        如果jdk.io.permissionsUseCanonicalPathfalse ,一个简单npath是一个通配符内npath当且仅当simple_npath.relativize(wildcard_npath)正是“..‘一个简单的npath是递归通配符内npath当且仅当simple_npath.relativize(wildcard_npath)是一系列的一个或多个’..” 。 这意味着“/ - ”表示“/ foo”而不是“foo”。

        无效FilePermission并不表示除自身之外的任何对象。 无效的FilePermission不受除了本身的任何物体或暗示FilePermission的“<< ALL FILES >>”他们的行动是该无效的超集FilePermission 即使使用相同的无效路径创建了两个FilePermission ,也不会暗示另一个。

        参数
        p - 要检查的权限。
        结果
        true如果指定的权限不是 null且此对象隐含, false
      • equals

        public boolean equals​(Object obj)
        检查两个FilePermission对象是否相等。 检查obj是否为FilePermission,并且具有与此对象相同的路径名和操作。
        Specified by:
        equalsPermission
        Implementation Note:
        更具体地说,当且仅当它们具有相同的通配符标志并且它们的cpath (如果jdk.io.permissionsUseCanonicalPathtrue )或npath (如果jdk.io.permissionsUseCanonicalPathfalse )相等时,两个路径名是相同的。 或者它们都是“<< ALL FILES >>”。

        jdk.io.permissionsUseCanonicalPathfalse ,无效的FilePermission不等于除其自身之外的任何对象,即使它们是使用相同的无效路径创建的。

        参数
        obj - 我们正在测试与此对象相等的对象。
        结果
        true如果obj是FilePermission,并且具有与此FilePermission对象相同的路径名和操作,否则为 false
        另请参见:
        Object.hashCode()HashMap
      • getActions

        public String getActions()
        返回操作的“规范字符串表示形式”。 也就是说,此方法始终按以下顺序返回当前操作:读取,写入,执行,删除,读取链接。 例如,如果此FilePermission对象允许写入和读取操作,则对getActions的调用将返回字符串“read,write”。
        Specified by:
        getActionsPermission
        结果
        行为的规范字符串表示。
      • newPermissionCollection

        public PermissionCollection newPermissionCollection()
        返回用于存储FilePermission对象的新PermissionCollection对象。

        FilePermission对象必须以允许它们以任何顺序插入集合的方式存储,但这也使PermissionCollection implies方法能够以有效(和一致)的方式实现。

        例如,如果您有两个FilePermissions:

        1. "/tmp/-", "read"
        2. "/tmp/scratch/foo", "write"

        并且您使用FilePermission调用implies方法:

          "/tmp/scratch/foo", "read,write", 
        那么implies函数必须同时考虑“/ tmp / - ”和“/ tmp / scratch / foo”权限,因此有效权限是“读,写”, implies返回true。 FilePermissions的“隐含”语义由此newPermissionCollection方法返回的PermissionCollection对象正确处理。
        重写:
        newPermissionCollectionPermission
        结果
        一个适合存储FilePermissions的新PermissionCollection对象。