13

假设我的包中有一个类,org.jake并且它有一个具有默认访问权限的方法(无修饰符)。然后该方法仅在包内可见。

但是,当有人收到我的框架的 jar 时,是什么阻止他们编写新类,将其包声明为org.jake,并使用我所谓的不可见方法?

换句话说,我能做些什么来防止这种情况发生吗?

4

4 回答 4

17

您可以将包密封在您的 jar 文件中。虽然它不是防弹的。

从安全的角度来看,最重要的是不要依赖访问修饰符等,真的。如果有人以不受限制的权限运行代码,他们将有权访问各种事物。访问修饰符实际上只是帮助阻止人们不小心射中自己的脚。

如果有人愿意在你的包中放入类来规避你的封装,他们显然无视你的最佳意图——我说让他们继续做下去,但不要为这种情况提供支持。

于 2010-05-21T06:28:42.980 回答
6

您无法采取任何措施来防止这种情况发生。甚至私有成员也可以通过反射访问。您应该认为 java 中的访问修饰符仅仅是暗示性的。

于 2010-05-21T06:28:04.707 回答
1
于 2010-05-21T10:44:53.513 回答
0

我只想说不允许他们在可以调用你的代码的地方运行代码,即在同一个 JVM 中。相反,您可以考虑只提供他们可以从外部调用的(网络)服务。不过,我不是很了解实现这一点的最佳方法。

于 2010-05-21T10:23:29.430 回答