-
- All Superinterfaces:
-
AttributeView
,FileAttributeView
,FileOwnerAttributeView
public interface AclFileAttributeView extends FileOwnerAttributeView
一个文件属性视图,支持读取或更新文件的访问控制列表(ACL)或文件所有者属性。ACL用于指定文件系统对象的访问权限。 ACL是
access-control-entries
的有序列表,每个列表指定UserPrincipal
以及该用户主体的访问级别。 此文件属性视图定义getAcl
和setAcl
方法,以根据RFC 3530: Network File System (NFS) version 4 Protocol中指定的ACL模型读取和写入ACL。 此文件属性视图适用于支持NFSv4 ACL模型的文件系统实现,或者在NFSv4 ACL模型与文件系统使用的ACL模型之间具有明确定义的映射。 这种映射的细节是依赖于实现的,因此未指定。此类还扩展了
FileOwnerAttributeView
,以便定义获取和设置文件所有者的方法。当文件系统提供对非同类的一组
file-systems
的访问时,则只有部分文件系统可能支持ACL。supportsFileAttributeView
方法可用于测试文件系统是否支持ACL。互通性
RFC 3530允许在支持POSIX定义的访问权限的平台上使用特殊用户标识。 特殊用户标识是“[email protected]
”,“[email protected]
”和“[email protected]
”。 当支持AclFileAttributeView
和PosixFileAttributeView
时 ,这些特殊用户身份可能包含在读取或写入的ACLentries
中。 文件系统的UserPrincipalLookupService
可用于通过调用lookupPrincipalByName
方法获得UserPrincipal
来表示这些特殊身份。用法示例:假设我们希望向现有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
>"owner" 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
-
-
方法详细信息
-
name
String name()
返回属性视图的名称。 此类型的属性视图的名称为"acl"
。- Specified by:
-
name
在界面AttributeView
- Specified by:
-
name
接口FileOwnerAttributeView
- 结果
- 属性视图的名称
-
getAcl
List<AclEntry> getAcl() throws IOException
读取访问控制列表。当文件系统使用与NFSv4定义的ACL模型不同的ACL模型时,此方法将返回ACL,该ACL是ACL到NFSv4 ACL模型的转换。
返回的列表是可修改的,以便于更改现有ACL。
setAcl
方法用于更新文件的ACL属性。- 结果
-
表示ACL的
entries
的有序列表 - 异常
-
IOException
- 如果发生I / O错误 -
SecurityException
- 对于默认提供程序,安装了安全管理器,它拒绝RuntimePermission
("accessUserInformation")
或其checkRead
方法拒绝对该文件的读访问权。
-
setAcl
void setAcl(List<AclEntry> acl) throws IOException
更新(替换)访问控制列表。如果文件系统支持访问控制列表,并且它使用的ACL模型与NFSv4定义的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
方法拒绝对该文件的写访问。
-
-