【问题标题】:Detect Applet context (am I inside an applet?)检测小程序上下文(我在小程序中吗?)
【发布时间】:2011-01-29 02:53:24
【问题描述】:

我想知道是否有办法让 Java 类确定它是否在 applet 中使用?

也就是说,我有一个库(一个 .jar 文件)可供 3rd 方应用程序和小程序使用。它确实可以在小程序中工作,但我想做一些不同的事情,具体取决于该库是否在小程序中使用 - 例如显示适用于小程序的错误、避免本地文件 I/O 等。

如果 Applet.getAppletContext() 是静态的,这样即使我没有小应用程序实例,我也可以调用它(并获取 NULL 或非 NULL),那就太好了,但可惜,它不是.有没有其他办法?

【问题讨论】:

    标签: java applet


    【解决方案1】:

    检测它是否作为小程序运行的另一种方法是在发生安全异常时使用回退方法。当在另一个环境中使用时,这将是有利的,例如具有安全上下文的 servlet 容器。

    例子:

    try {
        File file = new File("c:\\test.txt");
        System.out.println("Exists? " + file.exists());
    } catch (java.security.AccessControlException e) {
        // fallback
    }
    

    【讨论】:

    • 你真的想抓住SecurityException。也可以直接调用安全管理器来检查给定的上下文是否有特定的权限。
    【解决方案2】:

    根据Java Security Overview Whitepaper(第14页第2段)

    Java 小程序和 Java™ Web Start 应用程序自动运行 安装了 SecurityManager。 但是,执行的本地应用程序 默认情况下,通过 java 命令 不使用 SecurityManager 运行 已安装。

    这应该意味着对 System.getSecurityManager() 的调用将在小程序中返回非空值,并且在不在小程序中时将返回空值。例外是可能的,例如可以在运行程序时从命令行指定安全管理器。

    boolean insideApplet()
    {
      return null != System.getSecurityManager();
    }
    

    【讨论】:

    • 在非小程序中设置安全管理器的原因有很多......所以很遗憾,这不会很好地工作。
    • 不过,这只是一个开始。也许我可以得到SeurityManager,如果它为null,那么它绝对不是applet,如果它不为null,我会做,比如说,checkAccept("example.com", 80) 或类似的东西,例如。 com 是实际的 example.com,因此 applet 不能来自那里,并且将被禁止与该服务器通信。
    • 仍然不是一种可靠的方法。例如,当我标记学生作业时,我会非常严格地锁定他们的应用程序,这样他们就不会弄乱打分机。安装自己的安全管理器的原因有很多(我的另一个例子是确保应用程序不能调用 System.exit)。
    【解决方案3】:

    可能最安全的方法是让用户告诉你它是否在一个小程序中(只需将一个“布尔”变量添加到适当的构造函数和/或方法。

    当然,您想要一些更自动化的东西来避免这种情况,但是,据我所知,没有确切的方法可以知道跨 VM 运行的程序是如何运行的。我可能会首先查看像 torak 在他/她的回答中建议的安全管理器,而不是仅仅寻找 null 我会检查它是什么类型。我环顾四周,但没有发现小程序使用的安全管理器类是否有任何“标准”名称。

    最后,最安全的方法是让图书馆的用户做出决定,因为他们将拥有所需的信息。

    【讨论】:

    • 在某些时候可能需要对小程序强制执行一些限制,所以我需要有一些自动的...哦实际上,我可能会要求将 Applet 实例传递给我(或 null ) 并验证它(比如查看 Applet.getAppletContext() 是否返回了有效的上下文)。谢谢你的想法!
    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2011-08-18
    • 2011-12-16
    相关资源
    最近更新 更多