模块 java.base

类 Permission

java.lang.Object
java.security.Permission
所有已实现的接口:
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对象,权限名称是文件(或目录)的路径名,而操作列表(如“读、写”)指定了对指定文件(或目录中的文件)授予哪些操作指定目录)。操作列表对于 Permission 对象是可选的,例如 java.lang.RuntimePermission ,不需要这样的列表;您要么拥有命名权限(例如“system.exit”),要么没有。

每个子类必须实现的一个重要方法是比较权限的implies方法。基本上,“permission p1 implies permission p2”意味着如果一个人被授予权限p1,那么一个人自然被授予权限p2。因此,这不是相等性测试,而是更多的子集测试。

Permission 对象与 String 对象相似,因为它们一旦创建就不可更改。子类不应提供可以在权限创建后更改权限状态的方法。

自从:
1.2
参见:
  • 构造方法详细信息

    • Permission

      public Permission(String  name)
      构造具有指定名称的权限。
      参数:
      name - 正在创建的 Permission 对象的名称。
  • 方法详情

    • checkGuard

      public void checkGuard(Object  object) throws SecurityException
      实现权限的守卫接口。 SecurityManager.checkPermission 方法被调用,将此权限对象作为要检查的权限传递。如果授予访问权限,则静默返回。否则,抛出一个 SecurityException
      指定者:
      checkGuard 在接口 Guard
      参数:
      object - 被保护的对象(当前被忽略)。
      抛出:
      SecurityException - 如果安全管理器存在且其 checkPermission 方法不允许访问。
      参见:
    • implies

      public abstract boolean implies(Permission  permission)
      检查指定权限的操作是否“隐含”于此对象的操作。

      这必须由 Permission 的子类实现,因为它们是唯一可以对 Permission 对象施加语义的子类。

      implies 方法由 AccessController 用于确定请求的权限是否由已知在当前执行上下文中有效的另一个权限暗示。

      参数:
      permission - 检查的权限。
      返回:
      true 如果此对象隐含了指定的权限,false 如果不是。
    • equals

      public abstract boolean equals(Object  obj)
      检查两个 Permission 对象是否相等。

      不要使用 equals 方法来做出访问控制决策;使用 implies 方法。

      重写:
      equals 在类 Object
      参数:
      obj - 我们正在测试与此对象是否相等的对象。
      返回:
      true 如果两个 Permission 对象是等价的。
      参见:
    • hashCode

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

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

      • 每当在 Java 应用程序执行期间对同一 Permission 对象多次调用时,hashCode 方法必须一致地返回相同的整数。从一个应用程序的一次执行到同一应用程序的另一次执行,该整数不需要保持一致。
      • 如果根据 equals 方法两个 Permission 对象相等,则对两个 Permission 对象中的每一个调用 hashCode 方法必须产生相同的整数结果。
      重写:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见:
    • 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")',或者 '("ClassName" "name")' 如果操作列表是null 或为空。
      重写:
      toString 在类 Object
      返回:
      有关此 Permission 的信息。