gpt4 book ai didi

java - 私有(private)方法真的安全吗?

转载 作者:IT老高 更新时间:2023-10-28 11:32:23 25 4
gpt4 key购买 nike

在 Java 中,private 访问修饰符被认为是安全的,因为它在类之外是不可见的。那么外界也不知道这种方法。

但我认为 Java 反射可以用来打破这个规则。考虑以下情况:

public class ProtectedPrivacy{

private String getInfo(){
return "confidential";
}

}

现在我要从另一个类(class)获得信息:

public class BreakPrivacy{

public static void main(String[] args) throws Exception {
ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy();
Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null);
method.setAccessible(true);
Object result = method.invoke(protectedPrivacy);
System.out.println(result.toString());
}
}

此时我只是认为私有(private)方法仍然是安全的,因为要执行上述操作,我们必须知道方法名称。但是,如果类包含由其他人编写的私有(private)方法,我们将无法看到这些。

但是由于下面的代码行,我的观点变得无效。

Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods();

现在这个 method[] 包含了上面所有需要做的事情。我的问题是,有没有办法避免使用 Java 反射做这种事情?

我引用了 Java Documentation 的一些观点澄清我的问题。

Tips on Choosing an Access Level:

If other programmers use your class, you want to ensure that errors from misuse cannot happen. Access levels can help you do this.Use the most restrictive access level that makes sense for a particular member. Use private unless you have a good reason not to.

最佳答案

这取决于您所说的“安全”是什么意思。如果您使用允许此类事情的安全管理器运行,那么是的,您可以通过反射做各种令人讨厌的事情。但是在那种环境下,库可能只是被修改以使方法公开。

在这样的环境中,访问控制实际上是“建议性的”——您实际上是在信任代码可以很好地运行。如果您信任正在运行的代码,则应使用限制性更强的安全管理器。

关于java - 私有(private)方法真的安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com