java.security

接口
异常
java.lang.Object
  继承者 java.security.Permission
所有已实现的接口:
Serializable, Guard
直接已知子类:
AllPermission, BasicPermission, FilePermission, MBeanPermission, PrivateCredentialPermission, ServicePermission, SocketPermission, UnresolvedPermission

public abstract class Permission
     
extends Object
implements Guard, Serializable

表示访问系统资源的抽象类。所有权限都有一个名称(对它们的解释依赖于子类),以及用来定义特定 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
 

构造方法详细信息

Permission

public Permission(String name)
构造具有指定名称的权限。

参数:
name - 将创建的 Permission 对象的名称。
方法详细信息

checkGuard

public void checkGuard(Object object)
                throws SecurityException
为某权限实现 guard 接口。调用 SecurityManager.checkPermission 方法,将此权限对象作为要检查的权限传递。如果准许访问,则正常返回。否则,抛出 SecurityException。

指定者:
接口 Guard 中的 checkGuard
参数:
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 方法。

覆盖:
Object 中的 equals
参数:
obj - 要与此对象进行相等性测试的对象。
返回:
如果两个 Permission 对象等价,则返回 true。
另请参见:
Object.hashCode(), Hashtable

hashCode

public abstract int hashCode()
返回此 Permission 对象的哈希码值。

Permission 对象所需的 hashCode 行为如下:

  • 在 Java 应用程序执行期间,无论何时在同一个 Permission 对象上调用 hashCode 方法超过一次,它都必须始终返回相同的整数。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

  • 如果根据 equals 方法,两个 Permission 对象是相等的,那么在两个 Permission 对象中的每个对象上调用 hashCode 方法必须生成相同的整数结果。

覆盖:
Object 中的 hashCode
返回:
此对象的哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

getName

public final String getName()
返回此 Permission 的名称。例如,就 java.io.FilePermission 来说,名称将是路径名。

返回:
此 Permission 的名称。

getActions

public abstract String getActions()
以 String 的形式返回操作。由于此方法是抽象的,所以子类可以推迟到需要的时候才创建一个 String 的表示形式。子类应该始终以操作所认为的规范形式返回这些操作。例如,通过以下方式创建两个 FilePermission 对象:
   perm1 = new FilePermission(p1,"read,write");
   perm2 = new FilePermission(p2,"write,read"); 
 
当调用 getActions 方法时,两者都返回 "read,write"。

返回:
此 Permission 的操作。

newPermissionCollection

public PermissionCollection newPermissionCollection()
对给定 Permission 对象返回空 PermissionCollection,如果没有定义则返回 null。如果 Permission 类的子类需要在一个特定的 PermissionCollection 对象中存储其权限,以便调用 PermissionCollection.implies 方法时能提供正确的语义,则它们应该重写此方法。如果返回 null,那么此方法的调用方可以在任何它们选择的 PermissionCollection(使用 Hashtable 的,使用 Vector 的,等等)中随意存储此类型的权限。

返回:
此 Permission 类型的 PermissionCollection 对象,如果都没有定义则返回 null。

toString

public String toString()
返回描述此 Permission 的字符串。约定是指定类名称、权限名称和以下格式的操作:'("ClassName" "name" "actions")'。

覆盖:
Object 中的 toString
返回:
关于此 Permission 的信息。