36 lines
816 B
Text
36 lines
816 B
Text
|
|
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);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|