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(); } }