【问题标题】:"java.security.AccessControlException: access denied ("java.net.SocketPermission" "www.google.fr:80" "connect,resolve")"“java.security.AccessControlException:访问被拒绝(“java.net.SocketPermission”“www.google.fr:80”“connect,resolve”)”
【发布时间】:2023-03-16 13:08:01
【问题描述】:

使用我的 Java 小程序,我向 www.google.fr 运行 HTTP 请求,但浏览器显示: “java.security.AccessControlException:访问被拒绝(“java.net.SocketPermission”“www.google.fr:80”“连接,解析”)”

我签署了我的小程序:

keytool -genkey -alias keyName
keytool -selfcert -alias keyName
jarsigner appletName.jar keyName

有时我授权小程序执行。 但有时在获得许可的情况下不会出现弹出窗口。

我加载小程序:

function loadApplet() {
    console.log('loadApplet [start]');
    $('#applet').html('<applet name="requestApplet" archive="applet.jar" code="GoogleRequest.class" height="10" width="10"></applet>');
    console.log(document.requestApplet.methodOfApplet()); // <-- Exception
    console.log('loadApplet [finish]');
}

【问题讨论】:

  • 你能分享你正在使用的类的代码吗(它在哪里建立连接)?您是否能够使用该类连接到任何外部服务?

标签: java javascript applet


【解决方案1】:

你有什么JRE?我记得一些 1.6 版本(如果我没记错的话是 0.22)对网络进行了“安全升级”,之后这种奇怪的事情开始发生。

原因是那些对您的 javascript 公开的 Applet 函数不能直接调用 JRE 的网络功能。您必须以某种方式将 Javascript 与 applet 内的网络调用分离。

我用一种“消息总线”实现了这一点。 Javascript调用Applet公共函数将“消息”发送到内部总线,另一个applet读取它并进行网络调用。有效。

【讨论】:

  • 试试AccessController.doPrivileged(..)而不是总线。
猜你喜欢
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
相关资源
最近更新 更多