- 所有父级接口:
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方法拒绝对文件的写访问。
-