- 所有已实现的接口:
Serializable
,Guard
路径名是授予指定操作的文件或目录的路径名。以“/*”结尾的路径名(其中“/”是文件分隔符,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
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述boolean
检查两个 FilePermission 对象是否相等。返回操作的“规范字符串表示”。int
hashCode()
返回此对象的哈希码值。boolean
检查此 FilePermission 对象是否“暗示”了指定的权限。返回用于存储 FilePermission 对象的新 PermissionCollection 对象。在类 java.security.Permission 中声明的方法
checkGuard, getName, toString
-
构造方法详细信息
-
FilePermission
使用指定的操作创建一个新的 FilePermission 对象。path是文件或目录的路径名,并且动作包含对文件或目录授予的所需操作的逗号分隔列表。可能的操作是“读取”、“写入”、“执行”、“删除”和“读取链接”。以“/*”结尾的路径名(其中“/”是文件分隔符,
File.separatorChar
)表示该目录中包含的所有文件和目录。以“/-”结尾的路径名表示(递归地)该目录中包含的所有文件和子目录。特殊路径名“<<ALL FILES>>”匹配任何文件。由单个“*”组成的路径名表示当前目录中的所有文件,而由单个“-”组成的路径名表示当前目录中的所有文件以及(递归)当前目录中包含的所有文件和子目录。
包含空字符串的路径名表示空路径。
- 实现注意事项:
-
在此实现中,
jdk.io.permissionsUseCanonicalPath
系统属性指示如何处理和存储path
参数。如果系统属性的值设置为
true
,则path
被规范化并存储为名为cpath
的字符串对象。这意味着相对路径被转换为绝对路径,Windows DOS 风格的 8.3 路径被扩展为长路径,符号链接被解析为其目标,等等。如果系统属性的值设置为
false
,则path
将转换为在normalization
之后名为npath
的Path
对象。不执行规范化,这意味着不访问底层文件系统。如果在转换期间抛出InvalidPathException
,则此FilePermission
将被标记为无效。在任何一种情况下,通配符
path
末尾的“*”或“-”字符在规范化或规范化之前被删除。它存储在一个单独的通配符标志字段中。jdk.io.permissionsUseCanonicalPath
系统属性的默认值在此实现中为false
。该值也可以使用同名的安全属性设置,但设置系统属性将重写安全属性值。
- 参数:
path
- 文件/目录的路径名。actions
- 动作字符串。- 抛出:
IllegalArgumentException
- 如果 actions 是null
、空的、格式错误的或包含指定的可能操作以外的操作
-
-
方法详情
-
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
,当且仅当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
检查两个 FilePermission 对象是否相等。检查那个对象是一个 FilePermission,并且具有与此对象相同的路径名和操作。- 指定者:
equals
在类Permission
中- 实现注意事项:
-
更具体地说,当且仅当它们具有相同的通配符标志并且它们的
cpath
(如果jdk.io.permissionsUseCanonicalPath
是true
)或npath
(如果jdk.io.permissionsUseCanonicalPath
是false
)相等时,两个路径名才相同。或者它们都是“<<ALL FILES>>”。当
jdk.io.permissionsUseCanonicalPath
为false
时,无效的FilePermission
不等于除自身以外的任何对象,即使它们是使用相同的无效路径创建的。 - 参数:
obj
- 我们正在测试与此对象是否相等的对象。- 返回:
true
如果 obj 是一个 FilePermission,并且具有与此 FilePermission 对象相同的路径名和操作,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。 FilePermissions 的“隐含”语义由此newPermissionCollection
方法返回的 PermissionCollection 对象正确处理。- 重写:
newPermissionCollection
在类Permission
中- 返回:
- 适合存储 FilePermissions 的新 PermissionCollection 对象。
-