- 所有父级接口:
AttributeView
,FileAttributeView
,FileOwnerAttributeView
ACL 用于指定对文件系统对象的访问权限。 ACL 是 access-control-entries
的有序列表,每个列表指定一个 UserPrincipal
和该用户主体的访问级别。此文件属性视图定义了 getAcl
和 setAcl
方法,以根据 RFC 3530:网络文件系统 (NFS) 版本 4 协议 中指定的 ACL 模型读取和写入 ACL。此文件属性视图适用于支持 NFSv4 ACL 模型或在 NFSv4 ACL 模型和文件系统使用的 ACL 模型之间具有well-defined映射的文件系统实现。这种map的细节依赖于实现,因此未指定。
此类还扩展了 FileOwnerAttributeView
以定义获取和设置文件所有者的方法。
当一个文件系统提供对一组不同类的 file-systems
的访问时,只有一些文件系统可能支持 ACL。 supportsFileAttributeView
方法可用于测试文件系统是否支持 ACL。
互操作性
RFC 3530 允许在支持 POSIX 定义的访问权限的平台上使用特殊的用户身份。特殊用户身份是“OWNER@
”、“GROUP@
”和“EVERYONE@
”。当同时支持 AclFileAttributeView
和 PosixFileAttributeView
时,这些特殊用户身份可能包含在读取或写入的 ACL entries
中。文件系统的 UserPrincipalLookupService
可用于获取 UserPrincipal
以通过调用 lookupPrincipalByName
方法来表示这些特殊标识。
使用示例:假设我们希望向现有 ACL 添加一个条目以授予“joe”访问权限:
// lookup "joe" UserPrincipal joe = file.getFileSystem().getUserPrincipalLookupService() .lookupPrincipalByName("joe"); // get view AclFileAttributeView view = Files.getFileAttributeView(file, AclFileAttributeView.class); // create ACE to give "joe" read access AclEntry entry = AclEntry.newBuilder() .setType(AclEntryType.ALLOW) .setPrincipal(joe) .setPermissions(AclEntryPermission.READ_DATA, AclEntryPermission.READ_ATTRIBUTES) .build(); // read ACL, insert ACE, re-write ACL List<AclEntry> acl = view.getAcl(); acl.add(0, entry); // insert before any DENY entries view.setAcl(acl);
动态访问
在需要动态访问文件属性的地方,该属性视图支持的属性如下:
Name Type “ACL” List
<AclEntry
>“所有者” UserPrincipal
getAttribute
方法可用于读取 ACL 或所有者属性,就像调用 getAcl
或 getOwner
方法一样。
setAttribute
方法可用于更新 ACL 或所有者属性,就像调用 setAcl
或 setOwner
方法一样。
创建文件时设置ACL
支持此属性视图的实现也可能支持在创建文件或目录时设置初始 ACL。可以将初始 ACL 提供给方法,例如 createFile
或 createDirectory
作为 FileAttribute
和 name
"acl:acl"
和 value
是 AclEntry
对象的列表。
如果实现支持不同于 NFSv4 定义的 ACL 模型的 ACL 模型,则在创建文件时设置初始 ACL 必须将 ACL 转换为文件系统支持的模型。创建文件的方法应该拒绝(通过抛出 IOException
)任何尝试创建一个由于转换而不太安全的文件。
- 自从:
- 1.7
-
方法总结
在接口 java.nio.file.attribute.FileOwnerAttributeView 中声明的方法
getOwner, setOwner
-
方法详情
-
name
String name()返回属性视图的名称。这种类型的属性视图的名称为"acl"
。- 指定者:
name
在接口AttributeView
中- 指定者:
name
在接口FileOwnerAttributeView
中- 返回:
- 属性视图的名称
-
getAcl
读取访问控制列表。当文件系统使用不同于 NFSv4 定义的 ACL 模型的 ACL 模型时,此方法返回一个 ACL,该 ACL 是 ACL 到 NFSv4 ACL 模型的转换。
返回的列表是可修改的,以便于更改现有的 ACL。
setAcl
方法用于更新文件的 ACL 属性。- 返回:
-
表示 ACL 的
entries
的有序列表 - 抛出:
IOException
- 如果发生 I/O 错误SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserInformation")
或其checkRead
方法拒绝对文件的读取访问。
-
setAcl
更新(替换)访问控制列表。如果文件系统支持访问控制列表,并且它使用不同于 NFSv4 定义的 ACL 模型的 ACL 模型,则此方法必须将 ACL 转换为文件系统支持的模型。此方法应拒绝(通过抛出
IOException
)任何编写 ACL 的尝试,这些 ACL 似乎使文件比更新 ACL 时更安全。如果实现不支持AclEntryType.AUDIT
或AclEntryType.ALARM
条目的映射,则此方法在编写 ACL 时将忽略这些条目。如果 ACL 条目包含一个
user-principal
,但它与此属性视图没有关联到同一提供者,则抛出ProviderMismatchException
。额外的验证(如果有的话)是依赖于实现的。如果文件系统支持其他与安全相关的文件属性(例如文件
access-permissions
),则更新访问控制列表也可能导致这些与安全相关的属性被更新。- 参数:
acl
- 新的访问控制列表- 抛出:
IOException
- 如果发生 I/O 错误或 ACL 无效SecurityException
- 在默认提供程序的情况下,安装了安全管理器,它拒绝RuntimePermission
("accessUserInformation")
或其checkWrite
方法拒绝对文件的写访问。
-