【问题标题】:Protecting internal class variable in jar保护jar中的内部类变量
【发布时间】:2012-09-21 10:03:48
【问题描述】:

我们在一个类中有一个 getter 方法。 在同一个 JAR 中,我们希望变量可以从同一个包和子包中以无标识符访问级别访问。

低于来自http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html的访问级别

我们的问题是,我们如何阻止某人获取已编译的 .JAR、创建具有相同包命名空间定义的类以及能够通过 getter 访问我们的变量?

我们考虑过去掉特定变量的所有 getter,并在其他类通过 setter 和构造函数时将变量值传递给它们自己。显然,它们将是最后的课程。这样所有需要变量值的对象都有自己的私有副本。

我想知道是否有更好的方法?

【问题讨论】:

  • 是什么阻止他们拿走你的 jar,反编译类,向访问器添加“public”并彻底破坏安全性?

标签: java jar namespaces


【解决方案1】:

访问控制修饰符(publicprivateprotected)并不是一种安全工具,而是一种 OO 设计工具。它们用于实现 OO 模式,如封装、继承。

即使没有任何 getter 和私有变量,任何 Java 开发人员都可以使用反射来访问该变量。

如果你想保密,千万不要把它放在任何人执行的程序的变量中。将其保存在您自己的机器上。

【讨论】:

  • 你能举一个例子来说明某人如何使用反射来获取敏感变量吗?我不记得了——我虽然反射是为了检查类定义和成员。这适用于开发人员下载到 JAR 并在其上构建的 SDK。显然没问题,如果有人解压缩和反编译这些类,我们无法阻止它们......但我们已经知道了。该变量也是当时专门生成的 sessionID。
【解决方案2】:

- Reflection 似乎是这里的evil,使用它可以访问任何variable,即使带有private 访问修饰符。

- Four access controls like private, default, protected, and public 在 Java 中被引入更多是作为支持Core Object Oriented Concept like Inheritance 的工具, Encapsulation等等……

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2011-01-23
    • 1970-01-01
    • 2014-05-14
    • 2018-02-02
    相关资源
    最近更新 更多