java.lang.Object java.security.Permission
public abstract class Permission
表示访问系统资源的抽象类。所有权限都有一个名称(对它们的解释依赖于子类),以及用来定义特定 Permission 子类的语义的抽象方法。
大多数 Permission 对象也包含一个 "actions" 列表,它告知此对象上允许的操作。例如,对于 java.io.FilePermission
对象,权限名称是文件(或目录)的路径名,操作列表(如 "read, write")指定授予指定文件(或指定目录下的文件)的操作。对于不需要此类列表 Permission 对象(如 java.lang.RuntimePermission
),操作列表是可选的;可以有命名的权限(如 "system.exit"),也可以没有。
每个子类都必须实现的重要方法是 implies
方法,此方法用来比较 Permission。基本上,“权限 p1”暗含“权限 p2”意味着如果授予权限 p1,则自然授予权限 p2。因此,这不是相等性测试,而是子集测试。
Permission 对象和 String 对象的相似之处在于它们一经创建便不可改变。一旦创建了权限,子类不应该提供能够更改该权限状态的方法。
Permissions
,
PermissionCollection
,
序列化表格
构造方法摘要 | |
---|---|
Permission(String name) 构造具有指定名称的权限。 |
方法摘要 | |
---|---|
void |
checkGuard(Object object) 为某权限实现 guard 接口。 |
abstract boolean |
equals(Object obj) 检查两个 Permission 对象是否相等。 |
abstract String |
getActions() 以 String 的形式返回操作。 |
String |
getName() 返回此 Permission 的名称。 |
abstract int |
hashCode() 返回此 Permission 对象的哈希码值。 |
abstract boolean |
implies(Permission permission) 检查此对象的操作是否“暗含”指定权限的操作。 |
PermissionCollection |
newPermissionCollection() 对给定 Permission 对象返回空 PermissionCollection,如果没有定义则返回 null。 |
String |
toString() 返回描述此 Permission 的字符串。 |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public Permission(String name)
name
- 将创建的 Permission 对象的名称。
方法详细信息 |
---|
public void checkGuard(Object object) throws SecurityException
SecurityManager.checkPermission
方法,将此权限对象作为要检查的权限传递。如果准许访问,则正常返回。否则,抛出 SecurityException。
Guard
中的
checkGuard
object
- 将被保护的对象(当前忽略)。
SecurityException
- 如果安全管理器存在并且其
checkPermission
方法不允许访问。
Guard
,
GuardedObject
,
SecurityManager.checkPermission(java.security.Permission)
public abstract boolean implies(Permission permission)
Permission 子类必须实现此方法,因为它们是惟一能在 Permission 对象上施加语义的类。
AccessController 使用 implies
方法来确定某个所请求的权限是否暗含于另一个在当前执行上下文中已知为有效的权限中。
permission
- 要依据其来检查的权限。
public abstract boolean equals(Object obj)
不要使用 equals
方法做访问控制的决定;使用 implies
方法。
obj
- 要与此对象进行相等性测试的对象。
Object.hashCode()
,
Hashtable
public abstract int hashCode()
Permission 对象所需的 hashCode
行为如下:
hashCode
方法超过一次,它都必须始终返回相同的整数。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
equals
方法,两个 Permission 对象是相等的,那么在两个 Permission 对象中的每个对象上调用 hashCode
方法必须生成相同的整数结果。
Object.equals(java.lang.Object)
,
Hashtable
public final String getName()
java.io.FilePermission
来说,名称将是路径名。
public abstract String getActions()
perm1 = new FilePermission(p1,"read,write"); perm2 = new FilePermission(p2,"write,read");当调用
getActions
方法时,两者都返回 "read,write"。
public PermissionCollection newPermissionCollection()
PermissionCollection.implies
方法时能提供正确的语义,则它们应该重写此方法。如果返回 null,那么此方法的调用方可以在任何它们选择的 PermissionCollection(使用 Hashtable 的,使用 Vector 的,等等)中随意存储此类型的权限。
public String toString()