1

我正在尝试使用 javax.smartcardio 与客户端的智能卡进行通信。该小程序仅适用于我们 Intranet 内的用户。当我在 Eclipse 中调试它时,小程序工作正常。

当我使用以下 html 代码在浏览器中打开它时(我尝试过 IE9 和 Chrome):

<body>
<!-- ... -->
<script src="https://www.java.com/js/deployJava.js"></script>
<script> 
    var attributes = {
        code:'test.TestClass',  width:300, height:300, scriptable:true} ; 
    var parameters = {jnlp_href: 'TestJNLP.jnlp'} ; 
    deployJava.runApplet(attributes, parameters, '1.7'); 
</script>
<!-- ... -->
</body>

我得到以下异常: AccessControlException

Java 控制台仅显示以下 3 行:缺少应用程序名称清单属性:file:/C:/AppletTestSite/TestApplet.jar 主 jar 中缺少权限清单属性:file:/C:/AppletTestSite/TestApplet.jar CacheEntry[文件:/C:/AppletTestSite/TestApplet.jar]:updateAvailable=true,lastModified=2014 年 1 月 29 日星期三 08:40:39 CET,长度=6684

我已经尝试过的事情:

-使用doPrivileged :

public void init() {
    try {
        AccessController
                .doPrivileged(new PrivilegedExceptionAction<Integer>() {
                    public Integer run() {
                        ReaderInit(); //<------
                        return null;
                    }
                });
    } catch (PrivilegedActionException e) {
        // catch block
        e.printStackTrace();
    }

}

- 向 jnlp 文件添加权限:

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

- 在清单中添加以下行:

Permissions: all-permissions

- 使用 keytool&jarsigner 对 jar 文件进行自签名

C:\Program Files\Java\jdk1.7.0_51\bin>jarsigner -verify C:\AppletTestSite\TestApplet.jar
jar verified.

- 在 java 控制面板中,将 Security Level 设置为 Medium 并将站点的 URL 添加到 Exception Site List

我是否错过了什么,或者根本不可能(自 1.7.0_51 更新以来)在没有公共可信 CA 的情况下访问智能卡?

我想避免为小程序的每个用户更改策略文件。

4

0 回答 0