Module java.base
Package java.security

Class 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对象还包括一个“actions”列表,该列表指示对象允许的操作。例如,对于java.io.FilePermission对象,权限名称是文件(或目录)的路径名,而操作列表(例如“read, write”)指定为指定文件(或指定目录中的文件)授予的操作。对于不需要此类列表的Permission对象(例如java.lang.RuntimePermission),操作列表是可选的;您要么具有命名权限(例如“system.exit”),要么没有。

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

Permission对象类似于String对象,一旦创建后就无法更改。子类不应提供可以更改权限状态的方法一旦创建了权限。

自从:
1.2
参见:
  • Constructor Details

    • Permission

      public Permission(String name)
      用指定的名称构造权限。
      参数:
      name - 正在创建的Permission对象的名称。
  • Method Details

    • 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 - 我们正在测试与此对象相等的对象。
      返回:
      如果两个Permission对象等效,则返回true
      参见:
    • hashCode

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

      Permission对象的hashCode行为要求如下:

      • 在Java应用程序的执行期间,如果在同一Permission对象上多次调用hashCode方法,则hashCode方法必须始终一致地返回相同的整数。这个整数不需要在应用程序的一个执行到另一个执行之间保持一致。
      • 如果两个Permission对象根据equals方法相等,则在两个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")',或者如果操作列表为null或空,则为'("ClassName" "name")'。
      覆盖:
      toString 在类 Object
      返回:
      关于此Permission的信息。