我一直试图在netbeans之外的我的定位PC上运行一个时钟小程序,但是当我加载网页运行小程序时,我得到“Java安全应用程序阻止”。谷歌搜索我然后创建一个自签名证书思考,将解决问题。 我打开了一个命令窗口,将目录更改为jar和类所在的位置,并创建了密钥和证书。
cd C:\DEV\clock\classes
C:\Program Files\Java\jdk1.8.0_45\bin\keytool" -genkey -alias selfsigned -keyalg RSA -keysize 2048 -validity 365 -keystore keystore.jks
Enter keystore password: <password>
Re-enter new password: <password>
What is your first and last name?
[Unknown]: PC129.aa.dfdd.nasa.gov (this is fake but matches the pattern I used)
Etc.
C:\DEV\NelsonsPrograms\clock\clock\classes>"C:\Program Files\Java\jdk1.8.0_45\bin\keytool" -selfcert -keystore keystore.jks -alias selfsigned -validity 3650
Enter keystore password: <password>
C:\DEV\NelsonsPrograms\clock\clock\classes>"C:\Program Files\Java\jdk1.8.0_45\bin\jarsigner" -keystore keystore.jks threeClock.jar selfsigned
Enter Passphrase for keystore: selfsigned
jar signed.
Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a times tamp, users may not be able to validate this jar after the signer certificate's expiration date (2025-06-21) or after any future revocation date.
我试图再次启动网页,但这次我得到了“应用程序被阻止”。您的安全设置已阻止自签名应用程序运行“。我再次用Google搜索,他们似乎基本上都说你需要为你的PC添加一个Java例外来运行applet。但是所有示例似乎都是www.foo.com示例,其中包含web / applet目录的完整路径名,域名或完整域名,它们似乎都是www或http地址。那么,对于不是Web服务器或具有www地址设置的PC,正确的输入是什么?我不认为我需要包含在异常名称中的applet目录的完整路径,因为我只在一个示例中看到过。
让我们说这是我的PC信息:PC129是主机名。网络:aa.dfdd.nasa.gov
那么异常名称应该是什么?
此处的SA不知道,因为它们总是为具有www网址的Web服务器添加例外。
答案 0 :(得分:0)
SA终于来了,经过大量的组合,我们发现在java站点列表中添加以下异常将允许applet运行。
文件:/ C:/ DEV / NelsonsPrograms /时钟/时钟/类/
小程序和网页所在的位置需要完整路径名,否则小程序将被阻止。
答案 1 :(得分:0)
答案 2 :(得分:0)
我通过Java控制面板 - 高级选项卡打开了java控制台,看看为什么aosClock.class版本在签名的clock.jar时没有工作,你可以看到它的安全性再次阻止了applet工作。它阻止小程序读取时钟时间数据。谷歌搜索似乎表明我必须在applet中插入授权代码,但由于签名的jar版本在我的PC上工作正常,我将使用它进行测试。在真实的Web服务器上运行时,我不想添加applet中不需要的额外内容。无论如何,jar方式似乎也是制作web applet的标准方式。
aosClock:Thread-14:强制垃圾收集...... 线程“Thread-14”中的异常java.security.AccessControlException:访问被拒绝(“java.io.FilePermission”“C:\ DEV \ NelsonsPrograms \ clock \ clock \ classes \ aqua_aos_times”“read”) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) 在java.lang.SecurityManager.checkPermission(未知来源) at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source) 在java.lang.SecurityManager.checkRead(未知来源) 在java.io.File.isDirectory(未知来源) 在sun.net.www.protocol.file.FileURLConnection.connect(未知来源) 在sun.net.www.protocol.file.FileURLConnection.initializeHeaders(未知来源) at sun.net.www.protocol.file.FileURLConnection.getLastModified(Unknown Source) 在singleClock.run(aosClock.java:679)