【发布时间】:2011-12-11 23:02:01
【问题描述】:
我容忍了小程序不能执行任意 HTTP 请求的安全限制。
然而,似乎从大约一年前开始,甚至不可能向这个小程序本身所在的 URL 发出 HTTP 请求。至少如果请求是通过 JavaScript 调用小程序的方法来触发的。
这意味着甲骨文的一些安全人员决定让小程序不再“打电话回家”。有读者可以确认这一政策变化吗?
On my page 我有一个测试小程序,可以使用 JavaScript 进行检测以执行 HTTP 请求。这曾经奏效。然而,从几个月前开始,它就被破坏并以安全违规异常结束。
访问被拒绝(java.net.SocketPermission 91.90.146.25:80 connect,resolve)
此代码显示了执行 HTTP 请求的公共方法:
public class HttpRequestor extends Applet {
public String sendRequest(String urlstring) {
String response = "";
String line = "";
URL url;
try {
url = new URL( urlstring );
BufferedReader in = new BufferedReader(new InputStreamReader( url.openStream() ));
while ((line = in.readLine()) != null)
response += line + "\n";
return response;
}
catch (Exception ex) {
return ex.getMessage();
}
}
}
在 Java 运行时版本 1.6.0_29 上测试
我已经看到this question 的答案,但这并不能回答我的问题:这种行为改变的原因是什么? (而且,我不确定这个问题的解决方案是否也能解决这个问题)。
【问题讨论】:
-
“我不确定这个问题的解决方案是否也能解决这个问题” 除非你尝试过,否则你不会确定,我会忽略这个问题直到您发布结果。
-
您好 Andrew,我希望解决方案能够奏效。我现在已经更改了代码,通过 AccessController 路由 URL 请求,正如另一个答案中所建议的那样。有用。我的问题是:“这种行为改变的原因是什么”。这仍然是开放的。 (在这次经历之后,我对小程序失去了信心 - 谁知道接下来会发生什么变化 - 并且将切换到同时无处不在的 Ajax 请求。XmlHttpRequest 不会在不破坏一半网络的情况下改变其行为......)。
标签: java javascript security applet