繁体   English   中英

Javascript调用Java Applet签名

[英]Javascript call java applet signed

我的功能小程序

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调用函数applet,我已允许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

有谁知道如何修理它?

  1. 使用证书对小程序和所有.jar依赖项进行签名。
  2. 用下面提到的所有标签填充清单(由于我使用maven,所以它在xml中,您可以按照自己喜欢的方式编写)
<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. 将您的Web应用程序的http路径放入Java例外列表中
  4. 如果您的网址包含_ (下划线/下划线),则可能无法识别。
  5. 尝试将.jar移到html的同一文件夹中,而不要使用/ applet文件夹。
  6. 看一下这篇文章 ,我有一个类似的问题。

请记住,此错误说“不是函数”是因为您的.jar未加载-或您在js语法中出错了,我不这么认为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM