ProtectionDomain (Java Platform SE 8 )
Keywords: java.security.ProtectionDomain class
Date: 2026-04-17

compact1, compact2, compact3
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.

- - ### Constructor Summary

    Constructors
    Constructor and 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

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ClassLoader` | `getClassLoader()` Returns the ClassLoader of this domain.
    `CodeSource` | `getCodeSource()` Returns the CodeSource of this domain.
    `PermissionCollection` | `getPermissions()` Returns the static permissions granted to this domain.
    `Principal[]` | `getPrincipals()` Returns an array of principals for this domain.
    `boolean` | `implies(Permission permission)` Check and see if this ProtectionDomain implies the permissions expressed in the Permission object.
    `String` | `toString()` Convert a ProtectionDomain to a String.

    - ### Methods inherited from class java.lang.Object

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

- - ### Constructor Detail

    - #### ProtectionDomain

          public ProtectionDomain(CodeSource codesource,
                                  PermissionCollection permissions)

      Creates a new ProtectionDomain with the given CodeSource and Permissions. If the permissions object is not null, then `setReadOnly())` will be called on the passed in Permissions object. The only permissions granted to this domain are the ones specified; 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 the permissions object is not null, then `setReadOnly()` will be called on the passed in Permissions object. The permissions granted to this domain are dynamic; 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 `Policy` 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 Principals 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 Detail

    - #### 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)`

    - #### implies

          public boolean implies(Permission permission)

      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 ProtectionDomain was constructed to a `statically bound` PermissionCollection then the permission will only be checked against the PermissionCollection supplied at construction.

      However, if the ProtectionDomain was constructed with the constructor variant which supports `dynamically binding` permissions, then the permission will be checked against the combination of the PermissionCollection supplied at construction and the current Policy binding.

      Parameters:
        `permission` - the Permission object to check.
      Returns:
        true if "permission" is implicit to this ProtectionDomain.

    - #### toString

          public String toString()

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

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.