我正在尝试使用 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 的情况下访问智能卡?
我想避免为小程序的每个用户更改策略文件。