CallerSensitive access rights problems

Peter Levart peter.levart at gmail.com
Mon Nov 18 16:36:50 UTC 2013


On 11/18/2013 04:31 PM, Alan Bateman wrote:
> On 18/11/2013 14:59, Jochen Theodorou wrote:
>> Hi,
>>
>> java.lang.Class has multiple methods annotated with CallerSensitive 
>> (see 
>> http://hg.openjdk.java.net/jdk8/jdk8-gate/jdk/file/tip/src/share/classes/java/lang/Class.java). 
>>
>>
>> Now if we in Groovy here want to build our runtime structure for this 
>> class, and the security manager is not allowing access to 
>> sun.reflect, then we get into trouble. 
>> https://jira.codehaus.org/browse/GROOVY-6405 is caused by this.
>>
>> What do you suggest people with this problem, if adding 
>> accessClassInPackage.sun.reflect is no option?
> Is it sun.reflect.CallerSensitive.class.getDeclaredMethods that is 
> failing?
>
> -Alan.

 From GROOVY-6405 discussion I think it is, yes.

The work-around suggested in GROOVY-6405 does not work, because it has a 
bug. It should be written as:

     private static void setAnnotationMetaData(Annotation[] annotations 
/*, AnnotatedNode an */) {
         for (Annotation annotation : annotations) {
             if (annotation*.annotationType()*.getPackage() == null ||
                 
!"sun.reflect".equals(annotation*.annotationType()*.getPackage().getName())) 
{
                 System.out.println("Processing: " + 
annotation.annotationType().getName());
             } else {
                 System.out.println("Skipping: " + 
annotation.annotationType().getName());
             }
         }
     }


... i.e. don't call annotation.*getClass()* because what you get is a 
dynamic Proxy class implementing the annotation interface and such Proxy 
class does not live in the same package as the annotation interface...

There is another such annotation to watch for, in another protected 
package: *sun.misc.Contended* ...

Regards, Peter




More information about the core-libs-dev mailing list