我设计了一个Applet来截取屏幕截图并使用java.awt.Robot类将其保存在用户计算机上.我需要将这个applet嵌入到html页面中(使用object标签),这样当用户点击网页上的按钮时,就会截取屏幕截图.
小程序本身工作正常,我通过添加一个临时主方法并在我的本地计算机上作为常规Java应用程序运行它来测试它.
我遇到困难的地方是设置权限以允许它从其嵌入位置运行.显然机器人类有点危险,因此需要建立AWTPermission并且需要对applet本身进行签名.
我按照http://download.oracle.com/javase/tutorial/security/toolsign/index.html上的教程进行了操作,并成功创建了一个签名的.jar文件,然后创建了一个策略文件,该文件允许该教程中的演示应用程序跑.我现在遇到的问题是如何协调我学到的东西以及我的applet将被使用的情况.
我的目标受众包括大约100台机器,我需要它可以在所有机器上执行.我已将java .class文件打包到.jar中,并使用keytool和jarsigner对其进行签名.然后,我将.jar和.cer文件上传到托管相关页面的服务器目录.
但是:当我使用policytool在其中一台机器上创建新的策略文件来测试设置时,我仍然无法从HTML执行applet.我得到Java.Security.AccessControlException Acess拒绝了java.awt.AWTPermission createRobot错误.
我宁愿怀疑它的政策步骤出错,所以我将概述我采取的步骤:我将证书下载到本地机器并从中生成密钥库,我通过我添加的命令行从此目录启动'policytool'本地计算机上生成密钥库的目录和我的证书所在的目录.然后我点击添加策略按钮并输入SignedBy别名然后添加权限并选择AWTPermission目标名称我选择createRobot功能字段我一直留空,因为我不能想到这里适用的内容在这个窗口中签名也是空白我然后点击"确定"和"完成"并收到警告,告知我在第一步输入的别名没有公钥.我执行'另存为'并将我的策略文件保存到与放置证书和从中生成的密钥库相同的目录中.
这不允许我从网页上运行applet,但是我对这方面编程的有限理解没有提供出错的线索.
想法,想法,观察?如果我没有明确提到某些东西,那么我还没有做到.我最大的疑问是我收到的警告,但我似乎无法找到它出现的原因
编辑:忘了提一步.我在jre\lib\security\java.security文件中手动添加了'policy.url.3 = file:/ C:/ Testing/debugpolicy'这一行,因为那是我在上述步骤中创建的路径和策略文件名.我刚刚设法删除了我之前提到的警告,我一直在混淆我的别名'并且在创建策略文件期间为私有密钥库而不是公共密钥库提供了别名,但是我仍然遇到同样的问题