ProtectionDomain (Java SE 21 & JDK 21)
Description: declaration: module: java.base, package: java.security, class: ProtectionDomain
Keywords: java.security.ProtectionDomain class

Module java.base
Package java.security

# Class ProtectionDomain

java.lang.Object
java.security.ProtectionDomain

public class ProtectionDomain extends Object
The `ProtectionDomain` class encapsulates the characteristics of a domain, which encloses a set of classes whose instances are granted a set of permissions when being executed on behalf of a given set of Principals.

A static set of permissions can be bound to a `ProtectionDomain` when it is constructed; such permissions are granted to the domain regardless of the policy in force. However, to support dynamic security policies, a `ProtectionDomain` can also be constructed such that it is dynamically mapped to a set of permissions by the current policy whenever a permission is checked.

Since:
  1.2

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ProtectionDomain(CodeSource codesource, PermissionCollection permissions)`
  Creates a new `ProtectionDomain` with the given `CodeSource` and permissions.
  `ProtectionDomain(CodeSource codesource, PermissionCollection permissions, ClassLoader classloader, Principal[] principals)`
  Creates a new `ProtectionDomain` qualified by the given `CodeSource`, permissions, `ClassLoader` and array of principals.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final ClassLoader`
  `getClassLoader()`
  Returns the `ClassLoader` of this domain.
  `final CodeSource`
  `getCodeSource()`
  Returns the `CodeSource` of this domain.
  `final PermissionCollection`
  `getPermissions()`
  Returns the static permissions granted to this domain.
  `final Principal[]`
  `getPrincipals()`
  Returns an array of principals for this domain.
  `boolean`
  `implies(Permission perm)`
  Check and see if this `ProtectionDomain` implies the permissions expressed in the `Permission` object.
  `final boolean`
  `staticPermissionsOnly()`
  Returns `true` if this domain contains only static permissions and does not check the current `Policy` at the time of permission checking.
  `String`
  `toString()`
  Convert a `ProtectionDomain` to a `String`.

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### ProtectionDomain

    public ProtectionDomain(CodeSource codesource, PermissionCollection permissions)
    Creates a new `ProtectionDomain` with the given `CodeSource` and permissions. If permissions is not `null`, then `setReadOnly()` will be called on the passed in permissions.

    The permissions granted to this domain are static, i.e. invoking the `staticPermissionsOnly()` method returns `true`. They contain only the ones passed to this constructor and the current policy will not be consulted.

    Parameters:
      `codesource` - the codesource associated with this domain
      `permissions` - the permissions granted to this domain

  - ### ProtectionDomain

    public ProtectionDomain(CodeSource codesource, PermissionCollection permissions, ClassLoader classloader, Principal[] principals)
    Creates a new `ProtectionDomain` qualified by the given `CodeSource`, permissions, `ClassLoader` and array of principals. If permissions is not `null`, then `setReadOnly()` will be called on the passed in permissions.

    The permissions granted to this domain are dynamic, i.e. invoking the `staticPermissionsOnly()` method returns `false`. They include both the static permissions passed to this constructor, and any permissions granted to this domain by the current policy at the time a permission is checked.

    This constructor is typically used by `ClassLoaders` and `DomainCombiners` which delegate to the `Policy` object to actively associate the permissions granted to this domain. This constructor affords the policy provider the opportunity to augment the supplied `PermissionCollection` to reflect policy changes.

    Parameters:
      `codesource` - the `CodeSource` associated with this domain
      `permissions` - the permissions granted to this domain
      `classloader` - the `ClassLoader` associated with this domain
      `principals` - the array of `Principal` objects associated with this domain. The contents of the array are copied to protect against subsequent modification.
    Since:
      1.4
    See Also:
      - `Policy.refresh()`
      - `Policy.getPermissions(ProtectionDomain)`

- ## Method Details

  - ### getCodeSource

    public final CodeSource getCodeSource()
    Returns the `CodeSource` of this domain.
    Returns:
      the `CodeSource` of this domain which may be `null`.
    Since:
      1.2

  - ### getClassLoader

    public final ClassLoader getClassLoader()
    Returns the `ClassLoader` of this domain.
    Returns:
      the `ClassLoader` of this domain which may be `null`.
    Since:
      1.4

  - ### getPrincipals

    public final Principal[] getPrincipals()
    Returns an array of principals for this domain.
    Returns:
      a non-null array of principals for this domain. Returns a new array each time this method is called.
    Since:
      1.4

  - ### getPermissions

    public final PermissionCollection getPermissions()
    Returns the static permissions granted to this domain.
    Returns:
      the static set of permissions for this domain which may be `null`.
    See Also:
      - `Policy.refresh()`
      - `Policy.getPermissions(ProtectionDomain)`

  - ### staticPermissionsOnly

    public final boolean staticPermissionsOnly()
    Returns `true` if this domain contains only static permissions and does not check the current `Policy` at the time of permission checking.
    Returns:
      `true` if this domain contains only static permissions.
    Since:
      9

  - ### implies

    public boolean implies(Permission perm)
    Check and see if this `ProtectionDomain` implies the permissions expressed in the `Permission` object.

    The set of permissions evaluated is a function of whether the `ProtectionDomain` was constructed with a static set of permissions or it was bound to a dynamically mapped set of permissions.

    If the `staticPermissionsOnly()` method returns `true`, then the permission will only be checked against the `PermissionCollection` supplied at construction.

    Otherwise, the permission will be checked against the combination of the `PermissionCollection` supplied at construction and the current policy binding.

    Parameters:
      `perm` - the {code Permission} object to check.
    Returns:
      `true` if `perm` is implied by this `ProtectionDomain`.

  - ### toString

    public String toString()
    Convert a `ProtectionDomain` to a `String`.
    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of the object.