[jboss-cvs] JBossAS SVN: r73707 - projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue May 27 07:37:31 EDT 2008
Author: kabir.khan at jboss.com
Date: 2008-05-27 07:37:31 -0400 (Tue, 27 May 2008)
New Revision: 73707
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/SecurityActions.java
projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java
Log:
Use privileged blocks for Class.getDeclaredXXX()
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/SecurityActions.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/SecurityActions.java 2008-05-27 11:30:47 UTC (rev 73706)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/SecurityActions.java 2008-05-27 11:37:31 UTC (rev 73707)
@@ -21,6 +21,9 @@
*/
package org.jboss.aop.pointcut;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
@@ -103,4 +106,112 @@
else
return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
}
+
+ interface GetDeclaredConstructorsAction
+ {
+ Constructor<?>[] getDeclaredConstructors(Class<?> clazz);
+
+ GetDeclaredConstructorsAction NON_PRIVILEGED = new GetDeclaredConstructorsAction() {
+
+ public Constructor<?>[] getDeclaredConstructors(Class<?> clazz)
+ {
+ return clazz.getDeclaredConstructors();
+ }};
+
+ GetDeclaredConstructorsAction PRIVILEGED = new GetDeclaredConstructorsAction() {
+
+ public Constructor<?>[] getDeclaredConstructors(final Class<?> clazz)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<Constructor<?>[]>() {
+
+ public Constructor<?>[] run()
+ {
+ return clazz.getDeclaredConstructors();
+ }});
+ }};
+ }
+
+ static Constructor<?>[] getDeclaredConstructors(Class<?> clazz)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ return GetDeclaredConstructorsAction.NON_PRIVILEGED.getDeclaredConstructors(clazz);
+ }
+ else
+ {
+ return GetDeclaredConstructorsAction.PRIVILEGED.getDeclaredConstructors(clazz);
+ }
+ }
+
+ interface GetDeclaredMethodsAction
+ {
+ Method[] getDeclaredMethods(Class<?> clazz);
+
+ GetDeclaredMethodsAction NON_PRIVILEGED = new GetDeclaredMethodsAction() {
+
+ public Method[] getDeclaredMethods(Class<?> clazz)
+ {
+ return clazz.getDeclaredMethods();
+ }};
+
+ GetDeclaredMethodsAction PRIVILEGED = new GetDeclaredMethodsAction() {
+
+ public Method[] getDeclaredMethods(final Class<?> clazz)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<Method[]>() {
+
+ public Method[] run()
+ {
+ return clazz.getDeclaredMethods();
+ }});
+ }};
+ }
+
+ static Method[] getDeclaredMethods(Class<?> clazz)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ return GetDeclaredMethodsAction.NON_PRIVILEGED.getDeclaredMethods(clazz);
+ }
+ else
+ {
+ return GetDeclaredMethodsAction.PRIVILEGED.getDeclaredMethods(clazz);
+ }
+ }
+
+ interface GetDeclaredFieldsAction
+ {
+ Field[] getDeclaredFields(Class<?> clazz);
+
+ GetDeclaredFieldsAction NON_PRIVILEGED = new GetDeclaredFieldsAction() {
+
+ public Field[] getDeclaredFields(Class<?> clazz)
+ {
+ return clazz.getDeclaredFields();
+ }};
+
+ GetDeclaredFieldsAction PRIVILEGED = new GetDeclaredFieldsAction() {
+
+ public Field[] getDeclaredFields(final Class<?> clazz)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<Field[]>() {
+
+ public Field[] run()
+ {
+ return clazz.getDeclaredFields();
+ }});
+ }};
+ }
+
+ static Field[] getDeclaredFields(Class<?> clazz)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ return GetDeclaredFieldsAction.NON_PRIVILEGED.getDeclaredFields(clazz);
+ }
+ else
+ {
+ return GetDeclaredFieldsAction.PRIVILEGED.getDeclaredFields(clazz);
+ }
+ }
}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java 2008-05-27 11:30:47 UTC (rev 73706)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/pointcut/Util.java 2008-05-27 11:37:31 UTC (rev 73707)
@@ -495,7 +495,7 @@
{
Method[] methods = advisor.getAllMethods();
if (methods == null)
- methods = target.getDeclaredMethods();
+ methods = SecurityActions.getDeclaredMethods(target);
for (int i = 0; i < methods.length; i++)
{
MethodMatcher matcher = new MethodMatcher(advisor, methods[i], null);
@@ -517,7 +517,7 @@
public static boolean has(Class<?> target, ASTField field, Advisor advisor, boolean checkSuper)
{
- Field[] fields = target.getDeclaredFields();
+ Field[] fields = SecurityActions.getDeclaredFields(target);
for (int i = 0; i < fields.length; i++)
{
FieldGetMatcher matcher = new FieldGetMatcher(advisor, fields[i], null);
@@ -534,7 +534,7 @@
public static boolean has(Class<?> target, ASTConstructor con, Advisor advisor)
{
- Constructor<?>[] cons = target.getDeclaredConstructors();
+ Constructor<?>[] cons = SecurityActions.getDeclaredConstructors(target);
for (int i = 0; i < cons.length; i++)
{
ConstructorMatcher matcher = new ConstructorMatcher(advisor, cons[i], null);
More information about the jboss-cvs-commits
mailing list