接口 java.security.acl.Acl
- public interface Acl
- extends Owner
接口表示一 Access Control List(ACL)。 一个 Access Control List 是一个用来保护资源访问的数据结构。
一个 ACL 可以想象成一个具有多个 ACL 项的数据结构。每个 ACL 项都是 AclEntry 类型的接口, 它包含与特定主体相关的许可权限集合(一个主体表示一个实体,例如一个个体用户或者一个组)。此外,每个 ACL 项被指定为或为正数或负数。若为正,则表示许可权限授与了相关主体。若为负,则权限被否决。
每个 ACL 中的 ACL 项遵循下列规则:
- 每个主体最多具有一个正 ACL 项和一个负 ACL 项;
也就是说,任何主体具有多个正的或负的 ACL 项都是不允许的。
每个项都指定了授与(若为正)或否决(若为负)的许可权限集合。
- 如果某一特定的主体没有 ACL 项,则该主体被看作具有 null (空) 许可权限集合的实体。
- 如果有一正 ACL 项授与主体一特定的许可权限,同时有一负项否决该主体的同一许可,则结果为把该许可权限看作既未授予也未否决。
- 个体的许可权限一般优先于该个体所属的组的许可权限。 也就是说,个体的负数许可权限(许可权限的特定否决) 覆盖组的正数许可权限。个体的正数许可权限覆盖组的负数许可权限。
java.security.acl 程序包提供与 ACL 及其相关数据结构
(ACL 项,组,许可权限,等等)的接口 ,而 sun.security.acl
类提供该接口的缺省实现。 例如, java.security.acl.Acl
提供到 ACL 的接口, sun.security.acl.AclImpl 类就提供
该接口的缺省实现。
java.security.acl.Acl 接口扩展了 java.security.acl.Owner 接口。
所有者接口用来维护每个 ACL 的所有者列表。只有允许所有者修改 ACL。 例如,只有所有者才能调用
ACL 的 addEntry 方法添加一新的 ACL 项到该 ACL。
- 参见:
- AclEntry, Owner, getPermissions
方法索引
- addEntry(Principal, AclEntry)
- 添加一 ACL 项到该 ACL。
- checkPermission(Principal, Permission)
- 检查指定的主体是否具有指定的许可权限。
- entries()
- 返回一 ACL 项的枚举。
- getName()
- 返回 ACL 名。
- getPermissions(Principal)
- 返回一指定主体(代表一个实体,如个体或组)的允许的许可权限集合的枚举。
- removeEntry(Principal, AclEntry)
- 从该 ACL 删掉一 ACL 项。
- setName(Principal, String)
- 设置 ACL 名。
- toString()
- 返回 ACL 内容的字符串表示。
方法
setName
public abstract void setName(Principal caller,
String name) throws NotOwnerException
- 设置 ACL 名。
- 参数:
- caller - 调用该方法的主体。 它必须为该 ACL 的所有者。
- name - 赋给该 ACL 的名字。
- 抛出:
NotOwnerException
- 如果调用者主体不是该 ACL 的所有者。
getName
public abstract String getName()
- 返回 ACL 名。
- 返回:
- 该 ACL 的名字。
addEntry
public abstract boolean addEntry(Principal caller,
AclEntry entry) throws NotOwnerException
- 添加一 ACL 项到该 ACL。 一个项与一个主体(例如,一个个体或一个组)的许可权限集合相关联。每个主体最多具有一个正数 ACL 项(授予主体的指定的许可权限) 和一个负数 ACL 项(否决的指定的许可权限)。如果 ACL 中已存在一相同类型(正数或负数)的 ACL 项,则返回 false 。
- 参数:
- caller - 调用该方法的主体。 它必须为该 ACL 的所有者。
- entry - 添加到该 ACL 的 ACL 项。
- 返回:
- 成功则为 true 。如果该 ACL 中已经存在同一主体的相同类型(正数或负数)的项,则返回 false 。
- 抛出:
NotOwnerException
- 如果调用者主体不是该 ACL 的所有者。
removeEntry
public abstract boolean removeEntry(Principal caller,
AclEntry entry) throws NotOwnerException
- 从该 ACL 删掉一 ACL 项。
- 参数:
- caller - 调用该方法的主体。 它必须为该 ACL 的所有者。
- entry - 从该 ACL 删掉的 ACL 项。
- 返回:
- 成功则为 true,如果不是该 ACL 的项则为 false。
- 抛出:
NotOwnerException
- 如果调用者主体不是该 ACL 的所有者。
getPermissions
public abstract Enumeration getPermissions(Principal user)
- 返回一指定主体(代表一个实体,如个体或组)的允许的许可权限集合的枚举。允许的许可权限按如下方法计算:
- 如果在该 Access Control List 中不存在指定主体的项,则返回一
空的许可权限集合。
- 否则,确定主体的组的许可权限集合。 (一个主体可以属于一个或多个组,每个组是由接口 Group 表示的主体组。)
组的正的许可权限集合是主体所属的每个组的正数许可权限集合的并集。组的负数许可集合是主体所属的每个组的负数许可权限集合的并集。如果存在一特定的许可,同时出现在正数许可集合和负数许可集合里,则将其从这两个集合中都删掉。
确定个体的正的和负的许可权限集合。正的许可权限集合包含在正 ACL 项(如果存在)中为主体指定的许可权限。类似地,负数许可集合权限包含在负数 ACL 项(如果存在)中为主体指定的许可权限。个体正数(或负数)许可权限集合在该 ACL 中不包含该主体的正数(或负数) 项的条件下被认为是 null 。
授予主体的许可权限集合通过简单的个体许可权限覆盖组许可权限的规则计算得到。也就是说,主体的个体负数许可权限集合(许可权限的特定否决)覆盖组的正数许可权限集合,并且主体的正数许可权限集合覆盖组的负数许可权限集合。
- 参数:
- user - 返回许可权限集合的主体。
- 返回:
- 指定主体允许的许可权限集合。
entries
public abstract Enumeration entries()
- 返回一 ACL 项的枚举。 枚举中的每一个元素都为 AclEntry 型。
- 返回:
- 该 ACL 项的枚举。
checkPermission
public abstract boolean checkPermission(Principal principal,
Permission permission)
- 检查指定的主体是否具有指定的许可权限。 如果具有,则返回 true ,否则返回 false 。 另外,该方法检查传送的许可权限是否为指定主体允许的许可权限的成员。 允许的许可权限集合由
getPermissions 方法使用的算法确定。
- 参数:
- principal - 假定是一有效的、被验证过的主体。
-
permission - 待检查的许可权限。
- 返回:
- 如果主体具有指定的许可权限则为 true,否则为 false 。
- 参见:
- getPermissions
toString
public abstract String toString()
- 返回 ACL 内容的字符串表示。
- 返回:
- ACL 内容的字符串表示。
- 覆盖:
- 类 Object 中的 toString