从公共静态上下文访问私有静态方法

set*_*ora 4 java security oop constraints

考虑这个示例类,

class TargetClass {
    private static String SENSITIVE_DATA = "sw0rdfish";

    private static String getSensitiveData() {
        return SENSITIVE_DATA;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,

import java.lang.reflect.Method;

public class ClassPiercing {

    public static void main(String... args) throws Exception {
        Class targetClass = Class.forName("TargetClass");
        Method[] methods = targetClass.getDeclaredMethods();
        methods[0].setAccessible(true);
        String sensitiveData = (String)methods[0].invoke(null, null);
        System.out.println("Sensitive Data: " + sensitiveData);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是,

Sensitive Data: sw0rdfish
Run Code Online (Sandbox Code Playgroud)

这很危险.我该如何防止这种情况发生?