【问题标题】:Javascript call java applet signedJavascript调用java小程序签名
【发布时间】:2015-05-22 17:13:23
【问题描述】:

我的功能小程序

public String sign(String data) {
    String rs = "";
    if (data != null && !data.isEmpty()) {
        loadKeyStore();
        if (lsCertificateId.size() > 0) {
            selectCertId();
        //doSign
            if (password != null && !password.isEmpty()
            && selectedId != null && !selectedId.isEmpty()) {
                byte[] signedData = doSign(data.getBytes());
                rs = Base64.encode(signedData);
            }
        }
    }
    return rs;
}

我从 javascript 调用函数小程序,我允许 Java (TM) 在浏览器上运行

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <script type="text/javascript" src="jquery-2.1.1.min.js" ></script>
        <form>
            <textarea id="txtData" ></textarea>
            <br/>
            <input type="button" id="btnSign" value="Sign"  />
            <br/>
            <div id="lblSignedData"></div>
            <!--            <object id="appSign" width="300" height="100" type="application/x-java-applet" >
                            <param name="scriptable" value="true" />
                            <param name="mayscript" value="true" />
                            <param name="archive" value="applet/DsApplet.jar" />
                            <param name="code" value="dsapplet.DsApplet" />                
                        </object>-->
            <!--                        <object type="application/x-java-applet" height="300" width="550">
                                        <param name="code" value="Sample" />
                                        <param name="archive" value="Sample.jar" />
                                        Applet failed to run.  No Java plug-in was found.
                                    </object>-->
            <applet width="1" height="1" id="appSign" 
                    archive="applet/DsApplet.jar"
                    code="com.alupvn.digitalbill.applet.SignerApplet">
                <param name="signedAlgorithm" value="SHA1withRSA" />
                <param name="dlls" value=" vdctdcsp11.dll,vnpt-ca_csp11.dll,BkavCA.dll,vnpt-ca_v34.dll,viettel-ca.dll,ShuttleCsp11_3003.dll,ngp11v211.dll,st3csp11.dll,gclib.dll,fpt-ca.dll,CA2_v34.dll,CA2_csp11.dll,psapkcs.dll,ostc1_csp11.dll,fpt-ca-stx.dll,viettel-ca_v1.dll,viettel-ca_v2.dll,viettel-ca_v3.dll,etpkcs11.dll,U1000AUTO.dll,safe-ca.dll,eToken.dll,Vina-CA.dll,Vina-CA_s.dll,vnpt-ca_cl_v1.dll,ostt1_csp11.dll,ostt2_csp11.dll,ostt3_csp11.dll,ostc2_csp11.dll,viettel-ca_v4.dll,viettel-ca_v5.dll,viettel-ca_v6.dll,Vina-CAv3.dll,Vina-CAv4.dll,Vina-CAv5.dll,nca_eps2k2a.dll,nca_eps2k3a.dll" />
            </applet>


            <script type="text/javascript">
                $("#btnSign").click(function() {
                    var dataSigned = document.appSign.sign($("#txtData").val());
                    $("#lblSignedData").html(dataSigned);
                    //                alert("adsf");
                });
            </script>
            <!--<script src="http://www.java.com/js/deployJava.js"></script>-->
            <!--            <script type="text/javascript">
                            var attributes = {id: 'appSign', code: 'applet.DsApplet',
                                archive: 'DsApplet.jar',
                                width: 300, height: 100};
                            var parameters = {jnlp_href: 'DsApplet.jnlp'};
                            deployJava.runApplet(attributes, parameters, '1.6');
                            alert(document.appSign.getArch()) ;
                        </script>-->
        </form>
    </body>
</html>

当我打开 HTML 文件时出现错误:

var dataSigned = document.appSign.sign($("#txtData").val()); is not a function

有人知道怎么解决吗?

【问题讨论】:

  • 先尝试检查 document.appSign 是否解析到您的小程序。
  • 是的!我检查了它..它告诉我[object HTMLAppletElement]
  • 您不需要在您的小程序 (help.dottoro.com/lhbkaqko.php) 上使用 mayscript 属性吗?
  • 我显示 document.appSign 的所有元素,我得到 {"0":{},"length":1,"context":{"location":{"href":"file: ///html/demoSign.html","origin":"null","protocol":"file:","username":"","password":"","host":"","hostname ":"","port":"","pathname":"/html/demoSign.html","search":"","hash":""},"appSign":{}},"selector ":"#appSign"}

标签: java javascript applet


【解决方案1】:
  1. 使用证书为您的小程序和所有 .jar 依赖项签名。
  2. 使用下面提到的所有标签填充您的清单(它在 xml 中,因为我使用 maven,您可以按照自己喜欢的方式编写)
<codebase>http://location.of.your.jar/</codebase>
<permissions>all-permissions</permissions>
<Application-Library-Allowable-Codebase>http://location.of.your.jar/</Application-Library-Allowable-Codebase>
<Manifest-Version>1.0</Manifest-Version>
<Implementation-Title>App Name</Implementation-Title>
<Implementation-Version>0.1.0</Implementation-Version>
<Application-Name></Application-Name>
<Created-By>1.8.0_45</Created-By>
<Main-Class>package.YourClass</Main-Class>
<mode>development (or production)</mode>
<url>url of the application</url>
  1. doPrivileged包围你的java方法
  2. 确保您的浏览器已启用 java 插件
  3. 将您的网络应用程序的 http 路径放在 java exception list
  4. 如果您的网址有 _(下划线/下划线),则可能无法识别。
  5. 尝试将 .jar 移动到 html 的同一文件夹中,而不是使用 /applet 文件夹。
  6. 看看这个post,我遇到了类似的问题。

请记住,这个错误说“不是函数”是因为你的 .jar 没有加载 - 或者你的 js 语法有问题,我不这么认为。

【讨论】:

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