- java.lang.Object
-
- java.security.Permission
-
- java.io.FilePermission
-
- 实现的所有接口
-
Serializable
,Guard
public final class FilePermissionextends Permissionimplements 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
- 另请参见:
-
Permission
,Permissions
,PermissionCollection
-
-
构造方法摘要
构造方法 构造器 描述 FilePermission(String path, String actions)
使用指定的操作创建新的FilePermission对象。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 boolean
equals(Object obj)
检查两个FilePermission对象是否相等。String
getActions()
返回操作的“规范字符串表示形式”。int
hashCode()
返回此对象的哈希码值。boolean
implies(Permission p)
检查此FilePermission对象是否“隐含”指定的权限。PermissionCollection
newPermissionCollection()
返回用于存储FilePermission对象的新PermissionCollection对象。-
声明方法的类 java.security.Permission
checkGuard, getName, toString
-
-
-
-
构造方法详细信息
-
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路径扩展为长路径,符号链接解析为其目标等。如果系统属性的值被设置为
false
,path
被转换为Path
命名对象npath
后normalization
。 不执行规范化,这意味着不访问底层文件系统。 如果在转换过程中抛出InvalidPathException
,则此FilePermission
将被标记为无效。在任何一种情况下,在规范化或规范化之前删除通配符
path
末尾的“*”或“ - ”字符。 它存储在单独的通配符标志字段中。该默认值
jdk.io.permissionsUseCanonicalPath
系统属性为false
在此实现。 - 参数
-
path
- 文件/目录的路径名。 -
actions
- 动作字符串。 - 异常
-
IllegalArgumentException
- 如果操作为null
,null
空或包含除指定的可能操作之外的操作。
-
-
方法详细信息
-
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:
-
implies
类Permission
- Implementation Note:
- 如果
jdk.io.permissionsUseCanonicalPath
为true
,一个简单cpath
是一个通配符内cpath
当且仅当从以前删除的基本名称(路径名的名称序列中的最后名称)后的剩余部分等于后者,简单cpath
是递归内通配符cpath
当且仅当前者以后者开头时。如果
jdk.io.permissionsUseCanonicalPath
为false
,一个简单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:
-
equals
类Permission
- Implementation Note:
- 更具体地说,当且仅当它们具有相同的通配符标志并且它们的
cpath
(如果jdk.io.permissionsUseCanonicalPath
是true
)或npath
(如果jdk.io.permissionsUseCanonicalPath
是false
)相等时,两个路径名是相同的。 或者它们都是“<< ALL FILES >>”。当
jdk.io.permissionsUseCanonicalPath
是false
,无效的FilePermission
不等于除其自身之外的任何对象,即使它们是使用相同的无效路径创建的。 - 参数
-
obj
- 我们正在测试与此对象相等的对象。 - 结果
-
true
如果obj是FilePermission,并且具有与此FilePermission对象相同的路径名和操作,否则为false
。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此对象的哈希码值。- Specified by:
-
hashCode
在类Permission
- 结果
- 此对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
getActions
public String getActions()
返回操作的“规范字符串表示形式”。 也就是说,此方法始终按以下顺序返回当前操作:读取,写入,执行,删除,读取链接。 例如,如果此FilePermission对象允许写入和读取操作,则对getActions
的调用将返回字符串“read,write”。- Specified by:
-
getActions
类Permission
- 结果
- 行为的规范字符串表示。
-
newPermissionCollection
public PermissionCollection 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”权限,因此有效权限是“读,写”,implies
返回true。 FilePermissions的“隐含”语义由此newPermissionCollection
方法返回的PermissionCollection对象正确处理。- 重写:
-
newPermissionCollection
类Permission
- 结果
- 一个适合存储FilePermissions的新PermissionCollection对象。
-
-
-