模块 java.base
 java.io

类 FilePermission

所有已实现的接口:
Serializable , Guard

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

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

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

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

要授予的操作以包含一个或多个逗号分隔关键字列表的字符串形式传递给构造方法。可能的关键字是“read”、“write”、“execute”、“delete”和“readlink”。它们的含义定义如下:

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

操作字符串在处理之前被转换为小写。

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

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

自从:
1.2
参见:
  • 构造方法详细信息

    • FilePermission

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

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

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

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

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

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

      如果系统属性的值设置为 false,则 path 将转换为在 normalization 之后名为 npathPath 对象。不执行规范化,这意味着不访问底层文件系统。如果在转换期间抛出 InvalidPathException ,则此 FilePermission 将被标记为无效。

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

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

      该值也可以使用同名的安全属性设置,但设置系统属性将重写安全属性值。

      参数:
      path - 文件/目录的路径名。
      actions - 动作字符串。
      抛出:
      IllegalArgumentException - 如果 actions 是 null 、空的、格式错误的或包含指定的可能操作以外的操作
  • 方法详情

    • implies

      public boolean implies(Permission  p)
      检查此 FilePermission 对象是否“暗示”了指定的权限。

      更具体地说,如果出现以下情况,此方法将返回 true:

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

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

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

      “<<ALL FILES>>”表示所有其他路径名。除了“<<ALL FILES>>”本身之外,没有路径名暗示“<<ALL FILES>>”。

      指定者:
      implies 在类 Permission
      实现注意事项:
      如果 jdk.io.permissionsUseCanonicalPathtrue ,一个简单的 cpath 在通配符 cpath 内,当且仅当从前者中删除基本名称(路径名的名称序列中的最后一个名称)后,剩余部分等于后者,一个简单的 cpath 在内部递归通配符 cpath 当且仅当前者以后者开头时。

      如果 jdk.io.permissionsUseCanonicalPathfalse,当且仅当 simple_npath.relativize(wildcard_npath) 恰好是“..”时,一个简单的 npath 在通配符 npath 内,当且仅当 simple_npath.relativize(wildcard_npath) 是一系列一个或多个“。 ” .这意味着“/-”意味着“/foo”而不是“foo”。

      无效的 FilePermission 并不意味着除自身之外的任何对象。无效的 FilePermission 不被任何对象暗示,除了它本身或“<<ALL FILES>>”上的 FilePermission ,其操作是此无效 FilePermission 的超集。即使使用相同的无效路径创建两个 FilePermission,一个并不意味着另一个。

      参数:
      p - 检查的权限。
      返回:
      true 如果指定的权限不是 null 并且由此对象隐含,则 false 否则。
    • equals

      public boolean equals(Object  obj)
      检查两个 FilePermission 对象是否相等。检查那个对象是一个 FilePermission,并且具有与此对象相同的路径名和操作。
      指定者:
      equals 在类 Permission
      实现注意事项:
      更具体地说,当且仅当它们具有相同的通配符标志并且它们的cpath(如果jdk.io.permissionsUseCanonicalPathtrue)或npath(如果jdk.io.permissionsUseCanonicalPathfalse)相等时,两个路径名才相同。或者它们都是“<<ALL FILES>>”。

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

      参数:
      obj - 我们正在测试与此对象是否相等的对象。
      返回:
      true 如果 obj 是一个 FilePermission,并且具有与此 FilePermission 对象相同的路径名和操作,false 否则。
      参见:
    • hashCode

      public int hashCode()
      返回此对象的哈希码值。
      指定者:
      hashCode 在类 Permission
      返回:
      此对象的哈希码值。
      参见:
    • getActions

      public String  getActions()
      返回操作的“规范字符串表示”。也就是说,此方法始终按以下顺序返回当前操作:读取、写入、执行、删除、读取链接。例如,如果此 FilePermission 对象允许写入和读取操作,则调用 getActions 将返回字符串“read,write”。
      指定者:
      getActions 在类 Permission
      返回:
      动作的规范字符串表示。
    • 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”权限,所以有效权限是“read,write”,implies 返回 true。 FilePermissions 的“隐含”语义由此 newPermissionCollection 方法返回的 PermissionCollection 对象正确处理。
      重写:
      newPermissionCollection 在类 Permission
      返回:
      适合存储 FilePermissions 的新 PermissionCollection 对象。