- 所有已实现的接口:
-
Serializable
,Guard
路径名是被授予指定操作的文件或目录的路径名。以"/*"结尾的路径名(其中"/"是文件分隔符字符,File.separatorChar
)表示该目录中包含的所有文件和目录。以"/-"结尾的路径名表示该目录中(递归地)包含的所有文件和子目录。这样的路径名称为通配符路径名。否则,它是一个简单路径名。
包含特殊标记"<<ALL FILES>>"的路径名匹配任何文件。
注意: 单个"*"组成的路径名表示当前目录中的所有文件,而单个"-"组成的路径名表示当前目录中的所有文件以及(递归地)当前目录中包含的所有文件和子目录。
要授予的操作通过以包含一个或多个逗号分隔关键字的字符串传递给构造函数。可能的关键字是"read"、"write"、"execute"、"delete"和"readlink"。它们的含义定义如下:
- read
- 读权限
- write
- 写权限
- execute
-
执行权限。允许调用
Runtime.exec
。对应于SecurityManager.checkExec
。 - delete
-
删除权限。允许调用
File.delete
。对应于SecurityManager.checkDelete
。 - readlink
-
读取链接权限。允许通过调用符号链接的目标来读取目标,方法是调用
readSymbolicLink
方法。
在处理之前,操作字符串会转换为小写。
在授予FilePermissions时要小心。考虑授予对各种文件和目录的读取和尤其是写入访问权限的影响。具有写入操作的"<<ALL FILES>>"权限尤其危险。这授予了对整个文件系统的写入权限。这实际上允许的一件事是替换系统二进制文件,包括JVM运行时环境。
请注意: 代码始终可以从其所在目录(或该目录的子目录)读取文件;它不需要明确的权限来这样做。
- 自版本:
- 1.2
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
检查两个FilePermission对象是否相等。返回操作的"规范字符串表示"。int
hashCode()
返回此对象的哈希码值。boolean
检查此FilePermission对象是否"暗示"指定的权限。返回用于存储FilePermission对象的新PermissionCollection对象。Methods declared in class java.security.Permission
checkGuard, getName, toString
-
Constructor Details
-
FilePermission
创建具有指定操作的新FilePermission对象。 path是文件或目录的路径名,actions包含对文件或目录授予的所需操作的逗号分隔列表。可能的操作是"read"、"write"、"execute"、"delete"和"readlink"。以"/*"结尾的路径名(其中"/"是文件分隔符字符,
File.separatorChar
)表示该目录中包含的所有文件和目录。以"/-"结尾的路径名表示该目录中(递归地)包含的所有文件和子目录。特殊路径名"<<ALL FILES>>"匹配任何文件。包含单个"*"的路径名表示当前目录中的所有文件,而包含单个"-"的路径名表示当前目录中的所有文件以及(递归地)当前目录中包含的所有文件和子目录。
包含空字符串的路径名表示空路径。
- 实现注意:
-
在此实现中,
jdk.io.permissionsUseCanonicalPath
系统属性决定如何处理和存储path
参数。如果系统属性的值设置为
true
,path
将被规范化并存储为名为cpath
的String对象。这意味着相对路径将转换为绝对路径,Windows DOS风格的8.3路径将扩展为长路径,符号链接将解析为其目标等。如果系统属性的值设置为
false
,path
将在Path
对象命名为npath
后进行规范化
。不执行规范化,这意味着不访问底层文件系统。如果在转换过程中抛出InvalidPathException
,则此FilePermission
将被标记为无效。在任何情况下,在通配符
path
的末尾的"*"或"-"字符在规范化或规范化之前被移除。它存储在一个单独的通配符标志字段中。在此实现中,
jdk.io.permissionsUseCanonicalPath
系统属性的默认值为false
。该值也可以使用相同名称的安全属性进行设置,但设置系统属性将覆盖安全属性值。
- 参数:
-
path
- 文件/目录的路径名。 -
actions
- 操作字符串。 - 抛出:
-
IllegalArgumentException
- 如果操作为null
、空、格式错误或包含除指定可能操作之外的操作
-
-
Method Details
-
implies
检查此FilePermission对象是否"暗示"指定的权限。更具体地说,如果满足以下条件,此方法返回true:
- p是FilePermission的一个实例,
- p的操作是此对象操作的真子集,并且
- p的路径名被此对象的路径名所暗示。例如,"/tmp/*"暗示"/tmp/foo",因为"/tmp/*"包含"/tmp"目录中的所有文件,包括名为"foo"的文件。
简单路径名仅在它们相等时暗示另一个简单路径名。简单路径名永远不会暗示通配符路径名。通配符路径名仅在所有被后者暗示的简单路径名都被前者暗示时才暗示另一个通配符路径名。通配符路径名仅在以下情况下暗示简单路径名:
- 如果通配符标志为"*",则简单路径名的路径必须正好位于通配符路径名的路径内。
- 如果通配符标志为"-",则简单路径名的路径必须递归地位于通配符路径名的路径内。
"<<ALL FILES>>"暗示每个其他路径名。除了"<<ALL FILES>>"本身外,没有任何路径名暗示"<<ALL FILES>>"。
- 指定者:
-
implies
在类Permission
- 实现注意:
-
如果
jdk.io.permissionsUseCanonicalPath
为true
,则简单cpath
仅在从前者中删除基本名称(路径名的名称序列中的最后一个名称)后,剩余部分等于后者时才在通配符cpath
内,简单cpath
仅在从前者开始时才递归在通配符cpath
内。如果
jdk.io.permissionsUseCanonicalPath
为false
,则简单npath
仅在simple_npath.relativize(wildcard_npath)
恰好为".."时才在通配符npath
内,简单npath
仅在simple_npath.relativize(wildcard_npath)
是一个或多个".."的系列时才递归在通配符npath
内。这意味着"/-"暗示"/foo"但不暗示"foo"。无效的
FilePermission
不暗示任何对象,除了它自身。无效的FilePermission
不被任何对象暗示,除了它自身或一个对"<<ALL FILES>>"的FilePermission
,其操作是此无效FilePermission
的超集。即使两个FilePermission
使用相同的无效路径创建,一个也不暗示另一个。 - 参数:
-
p
- 要检查的权限。 - 返回:
-
如果指定的权限不为
null
且被此对象暗示,则返回true
,否则返回false
。
-
equals
检查两个FilePermission对象是否相等。检查obj是否为FilePermission,并且具有与此对象相同的路径名和操作。- 指定由:
-
equals
在类Permission
- 实现说明:
-
更具体地说,当且仅当两个路径名具有相同的通配符标志并且它们的
cpath
(如果jdk.io.permissionsUseCanonicalPath
为true
)或npath
(如果jdk.io.permissionsUseCanonicalPath
为false
)相等时,两个路径名才相同。或者它们都是"<<ALL FILES>>"。当
jdk.io.permissionsUseCanonicalPath
为false
时,一个无效的FilePermission
除了自身之外不等于任何对象,即使它们是使用相同的无效路径创建的。 - 参数:
-
obj
- 我们正在测试与此对象相等性的对象。 - 返回:
-
如果obj是一个FilePermission,并且具有与此FilePermission对象相同的路径名和操作,则返回
true
,否则返回false
。 - 参见:
-
hashCode
public int hashCode()返回此对象的哈希码值。- 指定由:
-
hashCode
在类Permission
- 返回:
- 此对象的哈希码值。
- 参见:
-
getActions
返回操作的“规范字符串表示”。也就是说,此方法始终以以下顺序返回当前操作:读取、写入、执行、删除、读取链接。例如,如果此FilePermission对象允许写入和读取操作,调用getActions
将返回字符串"read,write"。- 指定由:
-
getActions
在类Permission
- 返回:
- 操作的规范字符串表示。
-
newPermissionCollection
返回一个用于存储FilePermission对象的新PermissionCollection对象。FilePermission对象必须以一种允许它们以任何顺序插入到集合中的方式存储,但同时也使得PermissionCollection的
implies
方法能够以高效(且一致)的方式实现。例如,如果您有两个FilePermissions:
"/tmp/-", "read"
"/tmp/scratch/foo", "write"
并且您正在使用FilePermission调用
implies
方法:"/tmp/scratch/foo", "read,write",
那么implies
函数必须考虑到"/tmp/-"和"/tmp/scratch/foo"权限,因此有效权限是"read,write",implies
返回true。通过此newPermissionCollection
方法返回的PermissionCollection对象正确处理FilePermissions的"implies"语义。- 覆盖:
-
newPermissionCollection
在类Permission
- 返回:
- 适用于存储FilePermissions的新PermissionCollection对象。
-