现在的情况是,通过GAE无法访问远程的AWSS3文件系统。但可以使用GAE管理用户信息。
其原因是GAE的安全策略不允许我们使用java.net工具包去访问远程服务。
能不能使用GAE的网址抓取服务访问远程服务?
虽然GAE的网址抓取服务也提供Http服务编程接口,但AWSS3的编程接口却无法更改,故该方案行不通。
因此必须使用一个不能在GAE运行的程序库才能满足我们的需求。
解决之道就是使用Java Applet。
JavaApplet是用Java语言编写的一些小应用程序,它们可以直接嵌入到网页中,并由用户下载到本地执行。包含Applet的网页被称为Java-Powered页,可以称其为Java支持的网页。当用户访问这样的网页时,Applet就被下载到用户计算机上执行,但前提是用户使用的是支持Java的网络浏览器。由于Applet是在用户计算机上执行的,因此它可以执行我们所需要的java.net工具包。
我们使用Java Applet与swing工具包,开发一个上传文件的程序。Applet代码如代码清单5-34所示,详细代码请读者参考Sample5\Applet。
【代码清单5-34】
将Applet打包放入war\applet\FileChooserApplet.jar,修改FileManageMent.jsp文件,如代码清单5-35所示。
【代码清单5-35】
运行GAEFileSharingSystem,详细代码请读者参考Sample5\GAEFileSharingSystem。
由于用到的Jar包较多,所以浏览器需要一段时间加载,如图5-10所示。
图5-10 在浏览器中加载Applet
加载Applet后,将可以看到如图5-11所示的页面。
图5-11 文件管理页面
该页面分为上中下三个部分,上部为文件上传及选择按钮,中部为文件选择日志,下部为用户文件列表。
但当用户单击“选择文件”按钮时,没有任何反应。Java Applet有安全限制。其默认策略不允许Applet访问本地文件系统。因此需要更改安全策略,使Applet可以访问本地文件系统。
(1)使用keytool工具生成密匙库
keytool工具位于${java_home}/bin目录下。
在DOS窗口中执行命令:keytool-genkey-keystoreskatercloud.store-aliasskatercloud。
注意:skatercloud.store是用户的密匙库名称,可以随意修改,但请不要修改后缀。skatercloud为别名,这个也可以改成用户自己的名称。
执行上述命令后,DOS窗口中会提示用户输入keystore的密码、用户姓名、组织单位等信息。这里要注意的是记住输入密码,后面要用到。输入y进行确认。然后再按〈Enter〉键将fhx的主密码和store密码设置成一致即可。(www.xing528.com)
(2)使用keytool工具导出签名时用到的证书
在DOS窗口中执行命令:keytool-export-keystore skatercloud.store-alias skatercloud-file skatercloud.cert
D:\GAEFileSharingSystem\war\applet>keytool-export-keystore skatercloud.store-alias skatercloud-file skatercloud.cert
输入keystore密码,并保存在认证文件skatercloud.cert中。
注意:skatercloud.store就是第(1)步生成的密匙库名称,skatercloud也是在第(1)步中指定的别名,skatercloud.cert为生成的证书的名称,用户可以自己修改名称,但不要改后缀。命令执行成功,用户会在当前目录下找到一个文件skatercloud.cert,这就是刚才生成的证书。
(3)使用jarsigner工具签名jar压缩文档
jarsigner工具位于${java_home}/bin目录下。
在DOS窗口中执行命令:jarsigner-keystore skatercloud.store FileChooserApplet.jar skater-cloud
D:\GAEFileSharingSystem\war\applet>jarsigner-keystoreskatercloud.store FileChoos-erApplet.jar skatercloud
输入密钥库的口令短语:×××××。
警告:签名者证书将在六个月后过期。
注意:skatercloud.store就是第(1)步中生成的密匙库名称。
FileChooserApplet.jar就是appletjar文档。
skatercloud是提供者的名称,这里可设置为别名。
(4)部署
在应用程序的附属目录下创建一个skatercloud.policy文件,其内容如代码清单5-36所示。
【代码清单5-36】
同时每个客户端需要修改一下各自${java.home}/jre/lib/security目录下的java.security文件,如代码清单5-37所示。
【代码清单5-37】
运行时,会弹出“警告-安全”对话框,询问是否信任该网站,如图5-12所示。
图5-12 “警告-安全”对话框
现在,用户便可以选择文件并将其上传到S3文件系统中了,如图5-13所示。
图5-13 上传文件到S3系统
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。