javax.smartcardio を使用してクライアントのスマートカードと通信しようとしています。アプレットは、イントラネット内のユーザー専用です。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]: updateAvailable=true,lastModified=Wed Jan 29 08:40:39 CET 2014,length=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 コントロール パネルで、セキュリティ レベルを [中] に設定し、サイトの URL を [例外サイト リスト] に追加します。
それとも、(1.7.0_51 の更新以降) 公的に信頼された CA なしでスマートカードにアクセスすることはできなくなったのでしょうか?
アプレットのユーザーごとにポリシー ファイルを変更することは避けたいと考えています。