[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