【问题标题】:java.lang.RuntimePermission when running a applet from the web application从 Web 应用程序运行小程序时的 java.lang.RuntimePermission
【发布时间】:2012-06-14 09:18:59
【问题描述】:

我正在尝试从小程序中读取环境变量,这是我的代码

    String env = System.getenv("TWS");
    System.out.println(env);
    Runtime rt = Runtime.getRuntime();
    String s = env + "\\WebStart.bat " ;
    System.out.println(s);
    try {
        Process p = rt.exec(s);
    } catch (Exception e) {
    }

当我通过右键单击并运行从 netbeans 运行代码时,它运行没有问题。

但是当我把它放到一个 jar 文件中时,将它添加到我的 web 应用程序并尝试使用以下代码从 html 页面运行它

<applet code="draw.class" archive='AppletTest.jar'>
   <param name="shape" value="triangle"/>
</applet>

我收到一条错误消息,提示 access denied , java.lang.RuntimePermission

我正在使用 tomcat 6 运行这个 Web 应用程序。

我已经阅读了一些指南并在 tomcat 6 的 catalina.policy 文件中添加了以下条目并重新启动了 tomcat

permission java.lang.RuntimePermission "accessDeclaredMembers";

但仍然是相同的警告。有人可以为这个问题提出一个解决方案吗?

--兰加纳

【问题讨论】:

    标签: java web-applications applet environment-variables tomcat6


    【解决方案1】:

    当您从 netbeans 运行您的小程序时,Java 虚拟机在与您通过浏览器运行时不同的安全机制下运行它。

    通过浏览器下载的未使用安全证书签名的小程序被认为是不受信任的,称为未签名的小程序。在客户端上运行时,未签名的小程序在仅允许一组安全操作的安全沙箱中运行。您可以使用SecurityManager 检查是否向您的小程序授予了特定权限。例如在你的情况下:

    System.getSecurityManager().checkPermission(new RuntimePermission("accessDeclaredMembers"));
    

    您可以了解更多关于小程序安全herehere。可以在 here 找到一个非常好的制作签名小程序的教程。

    【讨论】:

    • +1 顺便说一句。您是否以同一个 ID 发布到 usenet (comp.lang.java)?
    • @AndrewThompson:没有。从来没有用过。
    • 使用签名的小程序我能够完成这个任务,谢谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多