我尝试使用javax.smartcardio与客户端的智能卡进行通信。 该applet仅适用于Intranet内的用户。 当我在Eclipse中调试它时,applet工作正常。
当我在浏览器中打开它时(我试过IE9和Chrome),其中包含以下HTML代码:
<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-Console仅显示以下3行: 缺少Application-Name清单属性:file:/ C:/AppletTestSite/TestApplet.jar 主jar中缺少权限清单属性:file:/ C:/AppletTestSite/TestApplet.jar CacheEntry [file:/ C:/AppletTestSite/TestApplet.jar]:updateAvailable = true,lastModified = Wed Jan 29 08:40:39 CET 2014,length = 6684
我尝试过的事情:
-using 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&amp; 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的情况下访问智能卡?
我想避免为applet的每个用户更改策略文件。