interface Callback<T> { T call(boolean flag); } class CallbackInvoker<T> { private final AccessControlContext context; Callback<T> callback; CallbackInvoker(Callback<T> callback) { context = AccessController.getContext(); this.callback = callback; } public T invoke() { // Obtain increased privileges. return AccessController.doPrivileged(new PrivilegedAction<T>() { @Override public T run() { // This operation would fail without // additional privileges. final boolean flag = Boolean.getBoolean("some.property"); // Restore the original privileges. return AccessController.doPrivileged( new PrivilegedAction<T>() { @Override public T run() { return callback.call(flag); } }, context); } }); } }