如何在浏览器中使用Java applet?

我试图在我的网站上部署一个Java小程序。 我也需要签名,因为我需要访问剪贴板。 我已经遵循了我所能find的所有签名教程,但没有取得任何成功。 这是我迄今为止所做的:

  • 在NetBeans中编写了一个小程序。 它在applet查看器中运行良好。
  • 从中创build一个.jar文件。
  • 通过这样做创build一个证书:
keytool -genkey -keyalg rsa -alias myKeyName keytool -export -alias myKeyName -file myCertName.crt 
  • 像这样用jarsigner签名:
 jarsigner "C:\my path\myJar.jar" myKeyName 
  • 做了一个包含这个HTML文件:
 <html> <body> <applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/> </body> </html> 

当我打开该HTML文件,我从来没有得到安全确认对话框(从而得到“java.security.AccessControlException:访问被拒绝”错误)。 这发生在所有浏览器上。

我错过了一个步骤?

也许是因为你打开了jar文件的一些.class文件?

这样可能不会显示警告。 我试图这样做,但它仍然显示我的证书警告和一个简单的情况下,它实际上阻止我从JAR与分离的类访问类。

也许你的具体设置或文件组织导致了这种行为。 如果你可以更详细的布局,我们可以帮助更好的(或者说,尝试把所有这些.class文件放在另一个签名的Jar中,并把它添加到档案“…,anotherJar.jar”)。

3个简单的步骤

  1. keytool -genkey -keystore myKeyStore -alias me

  2. keytool -selfcert -keystore myKeyStore -alias me

  3. jarsigner -keystore myKeyStore jarfile.jar我

首先,我build议获取有效的代码签名证书。 您可以从Thawte获得免费的证书。 尽pipe这些证书通常用于S / MIME,但它们也适用于代码签名。

第二个选项是将您的自签名证书导入到您的浏览器正在调用的JRE的cacert文件中。

接下来要检查的是确保你的浏览器运行你最新的jar。 一种方法是始终增加版本号。 另一个选项是让你清除你的Java小程序caching。 我通常也清除我的浏览器的caching,但这不应该需要。

你提到:

当我打开该HTML文件,我从来没有得到安全确认对话框…

你是从本地文件系统打开文件,还是通过一个URL到托pipeHTML文件和applet jar的Web服务器? 这可能是为什么你没有得到警告。

这是一种签署你的jar子的方法,然后检查所有的类文件是用你的密钥库签名的。

 #!/bin/bash KEYSTORE=/home/user/NetBeansProjects/sign/keystore FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"` for f in $FILES; do echo password | /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself; echo "Signed $f"; /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u; done 

编辑:这个答案是历史的。 JDK9显然会弃用applet。 在撰写本文时(2017年1月1日),您应该签署小程序,但不给他们额外的权限,然后过渡到更新的技术。

我build议你不要签署代码。 如果你正在玩别人的安全,那么你真的应该知道你在做什么。

JTextComponent应该允许复制和粘贴文本,如果这是足够的。

jarsigner -verify会检查你的jar是否签名。 您还可以快速浏览META-INF/中的清单文件和文件。

信任证书的popup对话框可能被禁用。 在Sun的实现中:打开Java控制面板; 转到高级选项卡; 展开安全节点; 前两个应答框应该是“允许用户授予签名上下文的权限”和“允许用户授予来自不受信任权限的内容的权限”。