summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins/management-jmx/src
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-02-20 15:46:29 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-02-20 15:46:29 +0000
commit608a0bb1b83fd2920dbc19dc2be399b27c62c1ba (patch)
tree72ce7b1d63c8d358aaa82d321b62caf56bccd298 /qpid/java/broker-plugins/management-jmx/src
parente9f5602cdf5b100a348a2f95c620805ffab803b9 (diff)
downloadqpid-python-608a0bb1b83fd2920dbc19dc2be399b27c62c1ba.tar.gz
QPID-5567 : Further changes to SecurityMangager
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1570239 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins/management-jmx/src')
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java35
1 files changed, 22 insertions, 13 deletions
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
index e78e59b7fc..f959977d1f 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
@@ -46,6 +46,9 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.security.AccessControlContext;
import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.Arrays;
/**
@@ -201,7 +204,7 @@ public class MBeanInvocationHandlerImpl implements InvocationHandler
}
}
- private Object authoriseAndInvoke(Method method, Object[] args) throws IllegalAccessException, InvocationTargetException
+ private Object authoriseAndInvoke(final Method method, final Object[] args) throws Throwable
{
String methodName;
// Get the component, type and impact, which may be null
@@ -229,23 +232,29 @@ public class MBeanInvocationHandlerImpl implements InvocationHandler
Operation operation = (isAccessMethod(methodName) || impact == MBeanOperationInfo.INFO) ? Operation.ACCESS : Operation.UPDATE;
security.authoriseMethod(operation, type, methodName);
- boolean oldAccessChecksDisabled = false;
- if(_managementRightsInferAllAccess)
+ if (_managementRightsInferAllAccess)
{
- oldAccessChecksDisabled = SecurityManager.setAccessChecksDisabled(true);
+ try
+ {
+ return Subject.doAs(SecurityManager.SYSTEM, new PrivilegedExceptionAction<Object>()
+ {
+ @Override
+ public Object run() throws IllegalAccessException, InvocationTargetException
+ {
+ return method.invoke(_mbs, args);
+ }
+ });
+ }
+ catch (PrivilegedActionException e)
+ {
+ throw e.getCause();
+ }
}
-
- try
+ else
{
return method.invoke(_mbs, args);
}
- finally
- {
- if(_managementRightsInferAllAccess)
- {
- SecurityManager.setAccessChecksDisabled(oldAccessChecksDisabled);
- }
- }
+
}
private String getType(Method method, Object[] args)