checkPermission()
method.
* Manipulates the access control context for code that needs to be executed
* the protection domain of the calling class (by explicitly ignoring the
* context of the calling code) in the doPrivileged()
methods.
* And provides a getContext()
method which gives the access
* control context of the current thread that can be used for checking
* permissions at a later time and/or in another thread.
*
* @author Mark Wielaard (mark@klomp.org)
* @since 1.2
*/
public final class AccessController
{
/**
* This class only has static methods so there is no public contructor.
*/
private AccessController()
{
}
/**
* Checks wether the access control context of the current thread allows
* the given Permission. Throws an AccessControlException
* when the permission is not allowed in the current context. Otherwise
* returns silently without throwing an exception.
*
* @param perm the permission to be checked.
* @exception AccessControlException thrown if the current context does not
* allow the given permission.
*/
public static void checkPermission(Permission perm)
throws AccessControlException
{
getContext().checkPermission(perm);
}
/**
* Calls the run()
method of the given action with as
* (initial) access control context only the protection domain of the
* calling class. Calls to checkPermission()
in the
* run()
method ignore all earlier protection domains of
* classes in the call chain. Note that the protection domains of classes
* called by the code in the run()
method are not ignored.
*
* @param action the PrivilegedAction
whose run()
* should be be called.
* @return the result of the action.run()
method.
*/
public static run()
method of the given action with as
* (initial) access control context the given context combined with the
* protection domain of the calling class. Calls to
* checkPermission()
in the run()
method ignore
* all earlier protection domains of classes in the call chain, but add
* checks for the protection domains given in the supplied context.
*
* @param action the PrivilegedAction
whose run()
* should be be called.
* @param context the AccessControlContext
whose protection
* domains should be added to the protection domain of the calling class.
* @return the result of the action.run()
method.
*/
public static run()
method of the given action with as
* (initial) access control context only the protection domain of the
* calling class. Calls to checkPermission()
in the
* run()
method ignore all earlier protection domains of
* classes in the call chain. Note that the protection domains of classes
* called by the code in the run()
method are not ignored.
* If the run()
method throws an exception then this method
* will wrap that exception in an PrivilegedActionException
.
*
* @param action the PrivilegedExceptionAction
whose
* run()
should be be called.
* @return the result of the action.run()
method.
* @exception PrivilegedActionException wrapped around any checked exception
* that is thrown in the run()
method.
*/
public static run()
method of the given action with as
* (initial) access control context the given context combined with the
* protection domain of the calling class. Calls to
* checkPermission()
in the run()
method ignore
* all earlier protection domains of classes in the call chain, but add
* checks for the protection domains given in the supplied context.
* If the run()
method throws an exception then this method
* will wrap that exception in an PrivilegedActionException
.
*
* @param action the PrivilegedExceptionAction
whose
* run()
should be be called.
* @param context the AccessControlContext
whose protection
* domains should be added to the protection domain of the calling class.
* @return the result of the action.run()
method.
* @exception PrivilegedActionException wrapped around any checked exception
* that is thrown in the run()
method.
*/
public static Additionally, if a call was made to {@link * #doPrivileged(java.security.PrivilegedAction,java.security.AccessControlContext)} * that supplied an {@link AccessControlContext}, then that context * will be intersected with the calculated one. * * @return The context. */ public static AccessControlContext getContext() { return VMAccessController.getContext(); } }