# 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.

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.

API Note:
  Installing a system-wide `Policy` object is no longer supported. The current policy is always a `Policy` object that grants no permissions.
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`.
`String`
`toString()`
Convert a `ProtectionDomain` to a `String`.

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
Modifier and Type
Method
Description
`protected Object`
`clone()`
Creates and returns a copy of this object.
`boolean`
`equals(Object obj)`
Indicates whether some other object is "equal to" this one.
`protected void`
`finalize()`
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
`final Class<?>`
`getClass()`
Returns the runtime class of this `Object`.
`int`
`hashCode()`
Returns a hash code value for this object.
`final void`
`notify()`
Wakes up a single thread that is waiting on this object's monitor.
`final void`
`notifyAll()`
Wakes up all threads that are waiting on this object's monitor.
`final void`
`wait()`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
`final void`
`wait(long timeoutMillis)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
`final void`
`wait(long timeoutMillis, int nanos)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

## 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.

API Note:
  Installing a system-wide `Policy` object is no longer supported. The current policy is always a `Policy` object that grants no permissions.
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.

API Note:
  Installing a system-wide `Policy` object is no longer supported. The current policy is always a `Policy` object that grants no permissions.
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.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`.

API Note:
  Installing a system-wide `Policy` object is no longer supported. The current policy is always a `Policy` object that grants no permissions.
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.

API Note:
  Installing a system-wide `Policy` object is no longer supported. The current policy is always a `Policy` object that grants no permissions.
Parameters:
  `perm` - the `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