【问题标题】:Run Priviliged Code in a Java Applet在 Java Applet 中运行特权代码
【发布时间】:2014-10-15 17:52:21
【问题描述】:

我正在从 Javascript 调用 Java 小程序。 Java 代码需要在特权模式下运行(最终它将显示一个文件选择器,该选择器将显示来自本地硬盘的文件)。 Javascript 调用返回java.lang.reflect.InvocationTargetException。任何关于如何让此代码工作的想法,或任何调试技术以获取有关它失败原因的更多信息,我们将不胜感激。

这是 Java 类。我已经删除了所有不必要的代码以试图揭示实际问题。

// Java code

public class OHLib extends Applet {

    public String getFile() { 

        String result;
        try {
            // this code does NOT generate an exception
            result = (String) AccessController.doPrivileged(new PrivilegedAction() {
                public String run() {
                    // JFileChooser code will go here
                    return "xxx";
               }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;

    }
}

我没有从上面的 try/catch 块中得到任何异常信息。

以上代码由JavaScript调用,如下:

// JavaScript code 

function BrowseForFile() {

    var x;
    try {
         // this code generates InvocationTargetException
         x = ohApplet.getFile();
    } catch (e) {
         console.log(e);
    }

}

上面的代码是我得到InvocationTargetException 的地方。

小程序在我的网页上部署如下:

<script src="/plugins/deployJava.js"></script>

<script>
    var attributes = { 
        id:'ohApplet',
        code:'OHLib',
        codebase: 'java',
        archive: 'OHLib.jar',   
        width:1, 
        height:1,
    } ;
    var parameters = { 
        jnlp_href: 'OHLib.jnlp',
        classloader_cache: 'false',
    } ;
    deployJava.runApplet(attributes, parameters, '1.6');

小程序位于签名的 jar 文件中,具有以下清单:

Application-Name: <appname>
Permissions: all-permissions
Codebase: <domain>.dev <domain>.com
Caller-Allowable-Codebase: <domain>.dev <domain>.com
Application-Library-Allowable-Codebase: <domain>.dev <domain>.com

JNLP文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">

    <information>
        <title>...</title>
        <vendor>...</vendor>
    </information>

    <security>
        <all-permissions />
    </security>

    <resources>
        <j2se version="1.8+" href="http://java.sun.com/products/autodl/j2se" />
        <jar href="OHLib.jar" main="true" />
    </resources>

    <applet-desc 
         main-class="OHLib"
         name="OHLib"
         width="1"
         height="1">
     </applet-desc>
</jnlp>         

任何关于如何让此代码工作的想法,或任何调试技术以获取有关它失败原因的更多信息,我们将不胜感激。

【问题讨论】:

    标签: java javascript applet elevated-privileges


    【解决方案1】:

    问题是我没有在 jar 文件中包含匿名内部类 (OHLib$1.class)。我原来的jar 命令看起来像这样:

    jar cfmv OHLib.jar "../../jar_manifest.txt" OHLib.class
    

    将其更改为以下解决了问题:

    jar cfmv OHLib.jar "../../jar_manifest.txt" OHLib.class OHLib$1.class
    

    积分转到this page 以获得解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2017-09-19
      相关资源
      最近更新 更多