- java.lang.Object
-
- java.security.Permission
-
- java.io.FilePermission
-
- All Implemented Interfaces:
-
Serializable
,Guard
public final class FilePermission extends Permission implements Serializable
此类表示访问文件或目录。 FilePermission由路径名和对该路径名有效的一组操作组成。路径名是授予指定操作的文件或目录的路径名。 以“/ *”结尾的路径名(其中“/”是文件分隔符,
File.separatorChar
)表示该目录中包含的所有文件和目录。 以“/ - ”结尾的路径名表示(递归)该目录中包含的所有文件和子目录。 这样的路径名称为通配符路径名。 否则,它是一个简单的路径名。由特殊令牌“<<所有文件>>”组成的路径名匹配任何文件。
注意:由单个“*”组成的路径名表示当前目录中的所有文件,而由单个“ - ”组成的路径名表示当前目录中的所有文件,并递归地显示当前目录中包含的所有文件和子目录目录。
要授予的操作将以包含一个或多个以逗号分隔的关键字的列表的字符串的形式传递给构造函数。 可能的关键字是“读取”,“写入”,“执行”,“删除”和“读取链接”。 其含义定义如下:
- 读
- 读权限
- 写
- 写许可
- 执行
-
执行权限
允许
Runtime.exec
。 对应SecurityManager.checkExec
。 - 删除
-
删除权限。
允许
File.delete
。 对应SecurityManager.checkDelete
。 - 的readlink
-
阅读链接权限
允许通过调用
readSymbolicLink
方法读取symbolic link的目标。
操作字符串在处理之前转换为小写。
授予FilePermissions时要小心。 考虑授予读取和特别写入访问各种文件和目录的含义。 使用写入操作的“<<所有文件>>”权限特别危险。 这允许写入整个文件系统的权限。 有效的一件事是更换系统二进制文件,包括JVM运行时环境。
请注意:代码可以随时从同一目录中读取文件(或该目录的子目录); 它不需要明确的许可这样做。
- 从以下版本开始:
- 1.2
- 另请参见:
-
Permission
,Permissions
,PermissionCollection
-
-
构造方法摘要
构造方法 Constructor 描述 FilePermission(String path, String actions)
使用指定的操作创建一个新的FilePermission对象。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
equals(Object obj)
检查两个FilePermission对象是否相等。String
getActions()
返回动作的“规范字符串表示”。int
hashCode()
返回此对象的哈希码值。boolean
implies(Permission p)
检查此FilePermission对象是否“暗示”指定的权限。PermissionCollection
newPermissionCollection()
返回一个新的PermissionCollection对象,用于存储FilePermission对象。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from class java.security.Permission
checkGuard, getName, toString
-
-
-
-
构造方法详细信息
-
FilePermission
public FilePermission(String path, String actions)
使用指定的操作创建一个新的FilePermission对象。 path是文件或目录的路径名, 操作包含在文件或目录上授予的所需操作的逗号分隔列表。 可能的操作是“读取”,“写入”,“执行”,“删除”和“读取链接”。以“/ *”结尾的路径名(其中“/”是文件分隔符,
File.separatorChar
)表示该目录中包含的所有文件和目录。 以“/ - ”结尾的路径名表示(递归)该目录中包含的所有文件和子目录。 特殊路径名“<<所有文件>>”匹配任何文件。由单个“*”组成的路径名表示当前目录中的所有文件,而由单个“ - ”组成的路径名表示当前目录中的所有文件,并递归地显示当前目录中包含的所有文件和子目录。
包含空字符串的路径名表示空的路径。
- Implementation Note:
-
在这个实现中,
jdk.io.permissionsUseCanonicalPath
系统属性指示如何处理和存储path
参数。如果系统属性的值设置为
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对象是否“暗示”指定的权限。更具体地说,这个方法返回true:
- p是FilePermission的一个实例,
- p的动作是这个对象的动作的一个子集,
- p的路径名由该对象的路径名隐含。 例如,“/ tmp / *”意味着“/ tmp / foo”,因为“/ tmp / *”包含“/ tmp”目录中的所有文件,包括名为“foo”的文件。
确切地说,一个简单的路径名意味着另一个简单的路径名,当且仅当它们相等时。 一个简单的路径名不会暗示通配符路径名。 通配符路径名意味着另一个通配符路径名,如果且仅当后者隐含的所有简单路径名都由前者隐含。 通配符路径名表示一个简单的路径名,如果且仅当它们
- 如果通配符标志为“*”,则简单路径名的路径必须在通配符路径名的路径内。
- 如果通配符标志为“ - ”,则简单路径名的路径必须在通配符路径名的路径中递归。
“<<所有文件>>”意味着每个其他路径名。 没有路径名,除了“<<所有文件>>”本身,意味着“<<所有文件>>”。
- 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
,其操作是此无效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
)相等则两个路径名相同。 或者他们都是“<<所有文件>>”。当
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()
返回动作的“规范字符串表示”。 也就是说,该方法总是按照以下顺序返回当前动作:read,write,execute,delete,readlink。 例如,如果此FilePermission对象允许写入和读取操作,则调用getActions
将返回字符串“读取,写入”。- Specified by:
-
getActions
在Permission
- 结果
- 规范字符串表示的动作。
-
newPermissionCollection
public PermissionCollection newPermissionCollection()
返回一个新的PermissionCollection对象,用于存储FilePermission对象。必须以允许以任何顺序将它们插入到集合中的方式存储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对象。
-
-
-