我的(代码签名)java applet中有一个错误“访问被拒绝(java.net.SocketPermission xxxx:443 connect_resolve。”我们有一个html“保存”按钮,它正在调用(通过javascript)applet方法来保存一个加载到applet中的文件到web服务器上。经过一些广泛的谷歌研究,我通过在doPrivileged()中包装我们的applet的保存方法代码来修复它.Bug似乎已经修复,人们很高兴。
我想确认我完全理解我应用的原始情况和解决方案(向后,我知道,但转身时间不允许我真正研究这个问题。)
特别令我感到困惑的是,我们在内部网络中的测试服务器上广泛测试了我们的applet,直到我们从网络外部的客户端计算机上尝试javascript“保存”按钮之后才发生此错误。所以在这一点上,我只是做了一个有根据的猜测:这就是java applet沙箱机制的工作原理。
这是真的吗?只要客户端小程序从位于同一域网络中的客户端计算机访问Web服务器资源,它就被视为在沙箱墙内?如果客户端计算机在Web服务器的本地网络外部,则applet请求被认为是在沙箱墙之外并且需要doPrivileged?或者在这里有另一种解释我错过了吗?
我无法在sun的文档中找到任何内容,也无法通过Google专门证明或反驳我的断言。非常感谢来自具有java applet经验的人的澄清
答案 0 :(得分:2)
只要客户端小程序从位于同一域网络中的客户端计算机访问Web服务器资源,它就被认为是在沙箱墙内?
如果是这样,你的意思是一个沙盒小程序可以“回家”到自己的服务器,然后是。
如果客户端计算机位于Web服务器的本地网络外部,则applet请求被认为是在沙箱墙之外并且需要doPrivileged?
applet需要信任(数字签名+最终用户接受)才能从其他服务器访问资源。让它变得更复杂的是JavaScript。突然间,JRE会考虑“不受信任”的因素。通过将代码包装在doPrivileged()方法中,我们向JRE说,即使被其他东西(如JS)调用,该代码也是可信任的。