Kum*_*nav 32 java security reflection class classloader
@CallerSensitive上述方法的注释隐含了什么?
例如,注释存在于Class的getClassLoader方法中
@CallerSensitive
public ClassLoader getClassLoader() {
//
}
Run Code Online (Sandbox Code Playgroud)
Sot*_*lis 46
根据我在评论中链接的JEP(也在这里),
调用者敏感方法根据其直接调用者的类别改变其行为.它通过调用
sun.reflect.Reflection.getCallerClass方法发现其调用者的类.
如果你看一下执行情况 Class#forName(String)
@CallerSensitive
public static Class<?> forName(String className)
throws ClassNotFoundException {
return forName0(className, true,
ClassLoader.getClassLoader(Reflection.getCallerClass()));
}
Run Code Online (Sandbox Code Playgroud)
,你注意到它正在使用Reflection.getCallerClass().如果我们看一下这种方法
返回调用此方法的方法的调用者的类,忽略与其关联的框架
java.lang.reflect.Method.invoke()及其实现.
@CallerSensitive
public static native Class getCallerClass();
Run Code Online (Sandbox Code Playgroud)
在这个JEP之前,问题似乎是如果调用者敏感方法是通过反射而不是直接调用的,那么必须有一个复杂的过程来识别实际的调用类是什么.如果通过反射调用该方法,则会出现问题.提出(并介绍)一个更简单的过程@CallerSensitive.
基本上,@CallerSensitive注释由JVM使用
JVM将跟踪此批注,并且可选地强制执行该
sun.reflect.Reflection.getCallerClass方法只能在使用此批注标记该方法时报告方法调用方的不变量.
| 归档时间: |
|
| 查看次数: |
10803 次 |
| 最近记录: |