假设我的包中有一个类,org.jake
并且它有一个具有默认访问权限的方法(无修饰符)。然后该方法仅在包内可见。
但是,当有人收到我的框架的 jar 时,是什么阻止他们编写新类,将其包声明为org.jake
,并使用我所谓的不可见方法?
换句话说,我能做些什么来防止这种情况发生吗?
假设我的包中有一个类,org.jake
并且它有一个具有默认访问权限的方法(无修饰符)。然后该方法仅在包内可见。
但是,当有人收到我的框架的 jar 时,是什么阻止他们编写新类,将其包声明为org.jake
,并使用我所谓的不可见方法?
换句话说,我能做些什么来防止这种情况发生吗?
您可以将包密封在您的 jar 文件中。虽然它不是防弹的。
从安全的角度来看,最重要的是不要依赖访问修饰符等,真的。如果有人以不受限制的权限运行代码,他们将有权访问各种事物。访问修饰符实际上只是帮助阻止人们不小心射中自己的脚。
如果有人愿意在你的包中放入类来规避你的封装,他们显然无视你的最佳意图——我说让他们继续做下去,但不要为这种情况提供支持。
您无法采取任何措施来防止这种情况发生。甚至私有成员也可以通过反射访问。您应该认为 java 中的访问修饰符仅仅是暗示性的。
我只想说不允许他们在可以调用你的代码的地方运行代码,即在同一个 JVM 中。相反,您可以考虑只提供他们可以从外部调用的(网络)服务。不过,我不是很了解实现这一点的最佳方法。