001    /*
002     * (c) 2010 ThoughtWorks Ltd
003     * All rights reserved.
004     *
005     * The software in this package is published under the terms of the BSD
006     * style license a copy of which has been included with this distribution in
007     * the LICENSE.txt file.
008     * 
009     * Created on 19-03-2010.
010     */
011    package com.thoughtworks.proxy.toys.privilege;
012    
013    import java.security.AccessControlContext;
014    import java.security.AccessController;
015    import java.security.PrivilegedActionException;
016    import java.security.PrivilegedExceptionAction;
017    
018    
019    /**
020     * Execution of a {@link PrivilegedExceptionAction} with the {@link AccessController}.
021     * 
022     * @author Jörg Schaible
023     * @since 1.0
024     */
025    public class AccessControllerExecutor implements ActionExecutor {
026        private final AccessControlContext context;
027    
028        /**
029         * Construct an AccessControllerExecutor that runs a {@link PrivilegedExceptionAction} with
030         * the privileges of the {@link AccessControlContext} of the caller.
031         * 
032         * @since 1.0
033         */
034        public AccessControllerExecutor() {
035            this(null);
036        }
037    
038        /**
039         * Construct an AccessControllerExecutor that runs a {@link PrivilegedExceptionAction} with
040         * special privileges.
041         * 
042         * @param context the {@link AccessControlContext} defining the privileges used to run the
043         *            action
044         * @since 1.0
045         */
046        public AccessControllerExecutor(AccessControlContext context) {
047            this.context = context;
048        }
049    
050        public Object execute(PrivilegedExceptionAction<Object> action)
051            throws PrivilegedActionException {
052            return AccessController.doPrivileged(action, context);
053        }
054    }