- java.lang.Object
-
- java.security.Permission
-
- All Implemented Interfaces:
-
Serializable
,Guard
- 已知直接子类:
-
AllPermission
,BasicPermission
,CardPermission
,FilePermission
,MBeanPermission
,PrivateCredentialPermission
,ServicePermission
,SocketPermission
,UnresolvedPermission
,URLPermission
public abstract class Permission extends Object implements Guard, Serializable
用于表示访问系统资源的抽象类。 所有权限都有一个名称(其解释取决于子类),以及用于定义特定Permission子类的语义的抽象函数。大多数权限对象还包括一个“操作”列表,用于告知对象允许的操作。 例如,对于
java.io.FilePermission
对象,权限名称是文件(或目录)的路径名,操作列表(例如“读取,写入”)指定为指定的文件授予哪些操作(或者为指定目录)。 对于不需要这样的列表的权限对象(如java.lang.RuntimePermission
,操作列表是可选的; 您具有命名权限(例如“system.exit”),或者您没有。每个子类必须实现的一个重要方法是比较权限的
implies
方法。 基本上,“权限p1意味着许可p2”表示如果被授予权限p1,则自然会授予权限p2。 因此,这不是一个等式测试,而是一个子集测试。权限对象与String对象类似,因为它们在创建后是不可变的。 子类不能提供可以在创建权限后更改权限状态的方法。
- 从以下版本开始:
- 1.2
- 另请参见:
-
Permissions
,PermissionCollection
, Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 Permission(String name)
构造具有指定名称的权限。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 void
checkGuard(Object object)
实施保护接口以获得许可。abstract boolean
equals(Object obj)
检查两个Permission对象的相等性。abstract String
getActions()
以String形式返回操作。String
getName()
返回此权限的名称。abstract int
hashCode()
返回此Permission对象的哈希码值。abstract boolean
implies(Permission permission)
检查指定权限的操作是否由此对象的操作“隐含”。PermissionCollection
newPermissionCollection()
为给定的Permission对象返回一个空的PermissionCollection,如果未定义,则返回null。String
toString()
返回描述此权限的字符串。
-
-
-
构造方法详细信息
-
Permission
public Permission(String name)
构造具有指定名称的权限。- 参数
-
name
- 正在创建的权限对象的名称。
-
-
方法详细信息
-
checkGuard
public void checkGuard(Object object) throws SecurityException
实施保护接口以获得许可。 调用SecurityManager.checkPermission
方法,将此权限对象作为权限进行检查。 如果访问被授予,则默认返回。 否则,抛出SecurityException。- Specified by:
-
checkGuard
在接口Guard
- 参数
-
object
- 被保护的对象(当前被忽略)。 - 异常
-
SecurityException
- 如果存在安全管理员,并且其checkPermission
方法不允许访问。 - 另请参见:
-
Guard
,GuardedObject
,SecurityManager.checkPermission(java.security.Permission)
-
implies
public abstract boolean implies(Permission permission)
检查指定权限的操作是否由此对象的操作“隐含”。这必须由Permission的子类实现,因为它们是唯一可以在Permission对象上强加语义的。
AccessController使用
implies
方法来确定所请求的权限是否被已知在当前执行上下文中有效的另一权限暗示。- 参数
-
permission
- 允许检查。 - 结果
- 如果此对象隐含指定的权限,则为true,否则为false。
-
equals
public abstract boolean equals(Object obj)
检查两个Permission对象的相等性。不要使用
equals
方法进行访问控制决策; 使用implies
方法。- 重写:
-
equals
中的Object
- 参数
-
obj
- 我们正在测试与该对象相等的对象。 - 结果
- 如果两个Permission对象都是等效的,则为true。
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public abstract int hashCode()
返回此Permission对象的哈希码值。权限对象所需的
hashCode
行为如下:- 无论何时在执行Java应用程序时多次在同一个Permission对象上调用该函数,那么
hashCode
方法必须始终返回相同的整数。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。 - 如果两个Permission对象根据
equals
方法相等,则在两个Permission对象中的每一个上调用hashCode
方法必须产生相同的整数结果。
- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
- 无论何时在执行Java应用程序时多次在同一个Permission对象上调用该函数,那么
-
getName
public final String getName()
返回此权限的名称。 例如,在java.io.FilePermission
的情况下,该名称将是一个路径名。- 结果
- 该权限的名称。
-
getActions
public abstract String getActions()
以String形式返回操作。 这是抽象的,所以子类可以延迟创建一个String表示,直到需要。 子类应该总是以他们认为是他们的规范形式返回动作。 例如,通过以下方式创建的两个FilePermission对象:perm1 = new FilePermission(p1,"read,write"); perm2 = new FilePermission(p2,"write,read");
当调用getActions
方法时,都返回“读,写”。- 结果
- 这个权限的动作。
-
newPermissionCollection
public PermissionCollection newPermissionCollection()
为给定的Permission对象返回一个空的PermissionCollection,如果未定义,则返回null。 类Permission的子类应该重写这个,如果他们需要将其权限存储在特定的PermissionCollection对象中,以便在调用PermissionCollection.implies
方法时提供正确的语义。 如果返回null,那么此方法的调用者可以自由地在其选择的任何PermissionCollection中存储此类型的权限(使用Hashtable,使用Vector等)。- 结果
- 一个新的PermissionCollection类型的PermissionCollection对象,如果没有定义,则返回null。
-
-