【问题标题】:error #2048 Security sandbox violation - cannot load data错误 #2048 违反安全沙箱 - 无法加载数据
【发布时间】:2011-09-05 01:25:57
【问题描述】:

当我尝试从 flex 进行 java 调用时,出现以下错误。

[RPC 故障 faultString="发送失败"
faultCode="Client.Error.MessageSend"
faultDetail="Channel.Security.Error 错误
错误 #2048:违反安全沙箱: 'http://sample.com/sample.swf' 不能 从加载数据 http://sample:8080/messagebroker/amf。 网址: 'http://sample:8080/messagebroker/amf'"]

当我尝试在本地 tomcat 服务器上运行相同的程序时,它工作正常。但是当作为站点托管时,我收到了这个错误。我也尝试将 crossdomain.xml 文件放在根目录中。但错误永远不会消失。跨域文件如下所示。

<cross-domain-policy>

<site-control permitted-cross-domain-policies="all" />

<allow-access-from domain="*"  to-ports="*"/> 

<cross-domain-policy/>

日志这样说

连接到 'http://sample:8080/messagebroker/amf' 停止 - 不允许 http://sample.com/sample.swf.

有没有人在托管 flex 网站时遇到过类似的问题?

【问题讨论】:

  • 你能从你的http://sample:8080/crossdomain.xml下载一些东西吗?
  • 我的网站托管为“sample.com”。当我尝试“sample.com/crossdomain.xml”时,我可以查看我放置的跨域文件。" domain=""/>
  • @constantiner 否。这不会打开跨域文件。我应该向主机提供商询问他们的 tomcat 的端口详细信息吗? TIA。

标签: apache-flex blazeds crossdomain.xml


【解决方案1】:

看看你有不同的域http://sample.com/和http://sample:8080/

【讨论】:

  • 我尝试将远程对象的端点更改为 sample.com/messagebroker/amf 。但它在启动时抛出以下错误 [RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url: '@ 987654324@'
  • 您的 Tomcat 在生产中运行的端口是什么?
  • 我不确定。我是网络托管的新手。我刚刚托管在一个付费托管网站上。我尝试使用端口“80”和“8080”,猜测它是默认端口。两者都给出了我从未摆脱的安全沙箱违规错误。当使用我的本地 tomcat 服务器进行测试时,它工作得非常好。
  • 我建议您不要使用硬编码端点,而是使用标准模板形式http://{server.name}:{server.port}/{context.root}/messagebroker/amf。在托管的情况下,您很可能应该省略上下文根目录,因此请尝试使用http://{server.name}:{server.port}/messagebroker/amf
【解决方案2】:

游戏有点晚了,但还有一些其他项目需要检查。

你说你可以运行本地的 tomcat 实例。我将假设您将这个服务作为本地主机调用,而不是通过 IP 地址(和/或计算机名称)。如果您正在运行一个 flex 应用程序并且您没有更改您的运行配置,那么您正在从 localhost 运行。离开 locahost 域后,确保进入运行配置(运行或调试按钮旁边的小向下箭头),并使用 IP 地址输入运行应用程序的本地路径。现在,您将运行应用程序的 IP 地址到服务的 IP 地址(或任何非本地主机)。这通常会解决问题。

接下来,确保您的 crossdomain.xml 文件位于服务器的根目录。您应该可以浏览到http://yourhostname/crossdomain.xml。不应该涉及任何路径。 crossdomain.xml 应该位于托管服务的根级别。

可能还需要将 Flex 工作区的本地实例设置为 Web 服务器(IIS、tomcat)下的虚拟目录。在我的情况下,我可以浏览到 127.0.0.1/workspace/someflexapp/bin-debug/projectname.html 并且 flex 应用程序将运行。

经历了很多次,按照上面的步骤,问题总能解决。

您可以使用如下所示的 crossdomain.xml 文件来开放访问 flex 将从 web/soap 服务请求的大部分内容。

<cross-domain-policy>
   <site-control permitted-cross-domain-policies="all"/>
   <allow-access-from domain="*" to-ports="*"/>
   <allow-http-request-headers-from domain="*" headers="*"/>
   <allow-http-request-headers-from domain="*"/>
</cross-domain-policy>

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多