Top Description Fields Constructors Methods
java.security

public final Class UnresolvedPermission

extends Permission
implements Serializable
Class Inheritance
All Implemented Interfaces
java.io.Serializable
Imports
sun.security.util.IOUtils, java.io.IOException, .ByteArrayInputStream, java.security.cert.Certificate, java.security.cert.*, java.util.ArrayList, .Hashtable, .List, .Objects, java.lang.reflect.*

The UnresolvedPermission class is used to hold Permissions that were "unresolved" when the Policy was initialized. An unresolved permission is one whose actual Permission class does not yet exist at the time the Policy is initialized (see below).

The policy for a Java runtime (specifying which permissions are available for code from various principals) is represented by a Policy object. Whenever a Policy is initialized or refreshed, Permission objects of appropriate classes are created for all permissions allowed by the Policy.

Many permission class types referenced by the policy configuration are ones that exist locally (i.e., ones that can be found on CLASSPATH). Objects for such permissions can be instantiated during Policy initialization. For example, it is always possible to instantiate a java.io.FilePermission, since the FilePermission class is found on the CLASSPATH.

Other permission classes may not yet exist during Policy initialization. For example, a referenced permission class may be in a JAR file that will later be loaded. For each such class, an UnresolvedPermission is instantiated. Thus, an UnresolvedPermission is essentially a "placeholder" containing information about the permission.

Later, when code calls AccessController#checkPermission on a permission of a type that was previously unresolved, but whose class has since been loaded, previously-unresolved permissions of that type are "resolved". That is, for each such UnresolvedPermission, a new object of the appropriate class type is instantiated, based on the information in the UnresolvedPermission.

To instantiate the new class, UnresolvedPermission assumes the class provides a zero, one, and/or two-argument constructor. The zero-argument constructor would be used to instantiate a permission without a name and without actions. A one-arg constructor is assumed to take a String name as input, and a two-arg constructor is assumed to take a String name and String actions as input. UnresolvedPermission may invoke a constructor with a null name and/or actions. If an appropriate permission constructor is not available, the UnresolvedPermission is ignored and the relevant permission will not be granted to executing code.

The newly created permission object replaces the UnresolvedPermission, which is removed.

Note that the getName method for an UnresolvedPermission returns the type (class name) for the underlying permission that has not been resolved.

Author
Roland Schemers
Since
1.2
See Also
java.security.Permission, java.security.Permissions, java.security.PermissionCollection, java.security.Policy

Field Summary

Modifier and TypeField and Description
private final String
actions

The actions of the permission.

private transient Certificate[]
private static final Debug
private final String
name

Hides java.security.Permission.name.

The permission name.
private static final Class<?>[]
private static final Class<?>[]
private static final Class<?>[]
private static final long
private final String
type

The class name of the Permission class that will be created when this unresolved permission is resolved.

Constructor Summary

AccessConstructor and Description
public
UnresolvedPermission(String
the class name of the Permission class that will be created when this unresolved permission is resolved.
type
,
String
the name of the permission.
name
,
String
the actions of the permission.
actions
,
Certificate[]
the certificates the permission's class was signed with. This is a list of certificate chains, where each chain is composed of a signer certificate and optionally its supporting certificate chain. Each chain is ordered bottom-to-top (i.e., with the signer certificate first and the (root) certificate authority last). The signer certificates are copied from the array. Subsequent changes to the array will not affect this UnresolvedPermission.
certs
)

Creates a new UnresolvedPermission containing the permission information needed later to actually create a Permission of the specified class, when the permission is resolved.

Method Summary

Modifier and TypeMethod and Description
public boolean

Returns:

true if obj is an UnresolvedPermission, and has the same type (class) name, permission name, actions, and certificates as this object.
equals
(Object
the object we are testing for equality with this object.
obj
)

Implements abstract java.security.Permission.equals.

Checks two UnresolvedPermission objects for equality.

public String

Returns:

the empty string "".
getActions
()

Implements abstract java.security.Permission.getActions.

Returns the canonical string representation of the actions, which currently is the empty string "", since there are no actions for an UnresolvedPermission.

public String

Returns:

the actions for the underlying permission that has not been resolved, or null if there are no actions
getUnresolvedActions
()

Get the actions for the underlying permission that has not been resolved.

public Certificate[]

Returns:

the signer certificates for the underlying permission that has not been resolved, or null, if there are no signer certificates. Returns a new array each time this method is called.
getUnresolvedCerts
()

Get the signer certificates (without any supporting chain) for the underlying permission that has not been resolved.

public String

Returns:

the target name of the underlying permission that has not been resolved, or null, if there is no target name
getUnresolvedName
()

Get the target name of the underlying permission that has not been resolved.

public String

Returns:

the type (class name) of the underlying permission that has not been resolved
getUnresolvedType
()

Get the type (class name) of the underlying permission that has not been resolved.

public int

Returns:

the hash code value for this object
hashCode
()

Implements abstract java.security.Permission.hashCode.

Returns the hash code value for this object.

public boolean

Returns:

false.
implies
(Permission
the permission to check against.
p
)

Implements abstract java.security.Permission.implies.

This method always returns false for unresolved permissions.

public PermissionCollection

Returns:

a new PermissionCollection object suitable for storing UnresolvedPermissions.
newPermissionCollection
()

Overrides java.security.Permission.newPermissionCollection.

Returns a new PermissionCollection object for storing UnresolvedPermission objects.

private void
readObject(ObjectInputStream
the ObjectInputStream from which data is read
ois
)

Restores this object from a stream (i.e., deserializes it).

pack-priv Permission
resolve(Permission p, Certificate[] certs)

try and resolve this permission using the class loader of the permission that was passed in.

public String

Returns:

information about this UnresolvedPermission.
toString
()

Overrides java.security.Permission.toString.

Returns a string describing this UnresolvedPermission.

private void
writeObject(ObjectOutputStream
the ObjectOutputStream to which data is written
oos
)

Writes this object out to a stream (i.e., serializes it).

Inherited from java.security.Permission:
checkGuardgetName

Field Detail

actionsback to summary
private final String actions

The actions of the permission.

certsback to summary
private transient Certificate[] certs
debugback to summary
private static final Debug debug
nameback to summary
private final String name

Hides java.security.Permission.name.

The permission name.

PARAMS0back to summary
private static final Class<?>[] PARAMS0
PARAMS1back to summary
private static final Class<?>[] PARAMS1
PARAMS2back to summary
private static final Class<?>[] PARAMS2
serialVersionUIDback to summary
private static final long serialVersionUID

Hides java.security.Permission.serialVersionUID.

Annotations
@Serial
typeback to summary
private final String type

The class name of the Permission class that will be created when this unresolved permission is resolved.

Constructor Detail

UnresolvedPermissionback to summary
public UnresolvedPermission(String type, String name, String actions, Certificate[] certs)

Creates a new UnresolvedPermission containing the permission information needed later to actually create a Permission of the specified class, when the permission is resolved.

Parameters
type:String

the class name of the Permission class that will be created when this unresolved permission is resolved.

name:String

the name of the permission.

actions:String

the actions of the permission.

certs:Certificate[]

the certificates the permission's class was signed with. This is a list of certificate chains, where each chain is composed of a signer certificate and optionally its supporting certificate chain. Each chain is ordered bottom-to-top (i.e., with the signer certificate first and the (root) certificate authority last). The signer certificates are copied from the array. Subsequent changes to the array will not affect this UnresolvedPermission.

Method Detail

equalsback to summary
public boolean equals(Object obj)

Implements abstract java.security.Permission.equals.

Checks two UnresolvedPermission objects for equality. Checks that obj is an UnresolvedPermission, and has the same type (class) name, permission name, actions, and certificates as this object.

To determine certificate equality, this method only compares actual signer certificates. Supporting certificate chains are not taken into consideration by this method.

Parameters
obj:Object

the object we are testing for equality with this object.

Returns:boolean

true if obj is an UnresolvedPermission, and has the same type (class) name, permission name, actions, and certificates as this object.

Annotations
@Override
getActionsback to summary
public String getActions()

Implements abstract java.security.Permission.getActions.

Returns the canonical string representation of the actions, which currently is the empty string "", since there are no actions for an UnresolvedPermission. That is, the actions for the permission that will be created when this UnresolvedPermission is resolved may be non-null, but an UnresolvedPermission itself is never considered to have any actions.

Returns:String

the empty string "".

Annotations
@Override
getUnresolvedActionsback to summary
public String getUnresolvedActions()

Get the actions for the underlying permission that has not been resolved.

Returns:String

the actions for the underlying permission that has not been resolved, or null if there are no actions

Since
1.5
getUnresolvedCertsback to summary
public Certificate[] getUnresolvedCerts()

Get the signer certificates (without any supporting chain) for the underlying permission that has not been resolved.

Returns:Certificate[]

the signer certificates for the underlying permission that has not been resolved, or null, if there are no signer certificates. Returns a new array each time this method is called.

Since
1.5
getUnresolvedNameback to summary
public String getUnresolvedName()

Get the target name of the underlying permission that has not been resolved.

Returns:String

the target name of the underlying permission that has not been resolved, or null, if there is no target name

Since
1.5
getUnresolvedTypeback to summary
public String getUnresolvedType()

Get the type (class name) of the underlying permission that has not been resolved.

Returns:String

the type (class name) of the underlying permission that has not been resolved

Since
1.5
hashCodeback to summary
public int hashCode()

Implements abstract java.security.Permission.hashCode.

Returns the hash code value for this object.

Returns:int

the hash code value for this object

Annotations
@Override
impliesback to summary
public boolean implies(Permission p)

Implements abstract java.security.Permission.implies.

This method always returns false for unresolved permissions. That is, an UnresolvedPermission is never considered to imply another permission.

Parameters
p:Permission

the permission to check against.

Returns:boolean

false.

Annotations
@Override
newPermissionCollectionback to summary
public PermissionCollection newPermissionCollection()

Overrides java.security.Permission.newPermissionCollection.

Returns a new PermissionCollection object for storing UnresolvedPermission objects.

Returns:PermissionCollection

a new PermissionCollection object suitable for storing UnresolvedPermissions.

Annotations
@Override
readObjectback to summary
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException

Restores this object from a stream (i.e., deserializes it).

Parameters
ois:ObjectInputStream

the ObjectInputStream from which data is read

Annotations
@Serial
Exceptions
IOException:
if an I/O error occurs
ClassNotFoundException:
if a serialized class cannot be loaded
resolveback to summary
pack-priv Permission resolve(Permission p, Certificate[] certs)

try and resolve this permission using the class loader of the permission that was passed in.

toStringback to summary
public String toString()

Overrides java.security.Permission.toString.

Returns a string describing this UnresolvedPermission. The convention is to specify the class name, the permission name, and the actions, in the following format: '(unresolved "ClassName" "name" "actions")'.

Returns:String

information about this UnresolvedPermission.

Annotations
@Override
writeObjectback to summary
private void writeObject(ObjectOutputStream oos) throws IOException

Writes this object out to a stream (i.e., serializes it).

Parameters
oos:ObjectOutputStream

the ObjectOutputStream to which data is written

Annotations
@Serial
Exceptions
IOException:
if an I/O error occurs
Serial data
An initial String denoting the type is followed by a String denoting the name is followed by a String denoting the actions is followed by an int indicating the number of certificates to follow (a value of "zero" denotes that there are no certificates associated with this object). Each certificate is written out starting with a String denoting the certificate type, followed by an int specifying the length of the certificate encoding, followed by the certificate encoding itself which is written out as an array of bytes.