【问题标题】:Controlling access to classes in a JAR控制对 JAR 中的类的访问
【发布时间】:2012-06-14 16:26:11
【问题描述】:

好的,所以我正在编写一个 JAR 作为即时通讯系统的后端实现。为了让课程进行互动,我使用public class MyClassHere { ... }。但是当我将所有类编译到 JAR 中时,我不希望除主类之外的任何类都可以访问。我该怎么做?

【问题讨论】:

    标签: java class jar


    【解决方案1】:

    我能想到的唯一方法是在构建链中使用像 ProGuard 这样的工具来停止暴露主类之外的所有内容。

    【讨论】:

    • 如何配置 ProGuard 来做到这一点?我会对其进行一些搜索,但我以前从未使用过它。
    • 该链接页面上的第一个示例,基本上,它只保留主要功能并隐藏/混淆/重命名/优化其他所有内容。
    • 我没有 main 函数,因为这只是实现。基本上我希望能够使用这个 JAR,编写另一个调用主文件构造函数的程序,然后只能触摸该主类的方法。
    • 在这种情况下,您基本上应该将示例配置中的public static void main(java.lang.String[]); 行替换为public *
    【解决方案2】:

    不是很优雅,也不是很慢,但是在这些类的构造函数中,您可以检查它们被实例化的类(使用new Exception.getStacktrace()) - 如果由您的类以外的任何东西调用,则限制控制。

    【讨论】:

    • 这将用于控制类的实例化,但我也不希望访问类的方法。在服务器上几乎每个类的每个方法上实现它都会有点开销
    • @Odiefrom 不是每个方法——除了构造函数,只有静态方法你必须添加这些检查。没有对象实例化,也不能调用非静态方法。但我同意,不是很优雅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多