Glassfish V3 下页面使用 swf 时 crossdomain.xml 应放在哪里?

我先是在 Flex Builder 做了一个小的 swf 文件,调试一切正常,可以 Java EE 应用程序通讯。

当把这个 swf 嵌入到 Servlet 后,一运行就提示安全错误:

Fault faultString="Security error accessing url"
faultCode="Channel.Security.Error" 
faultDetail="Destination: DefaultHTTP"


这个错误已经是很普遍的问题了,在网上一搜就一大堆答案。Adobe 官方及各地高手的答案都是一个,就是在 网站根目录放上一个 crossdomain.xml 文件,里面的内容大同小异,基本就是:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>

   <!-- This is a master socket policy file -->
   <!-- No other socket policies on the host will be permitted -->
   <site-control permitted-cross-domain-policies="master-only"/>

   <!-- Instead of setting to-ports="*", administrator's can use ranges and commas -->
   <!-- This will allow access to ports 123, 456, 457 and 458 -->
   <!-- <allow-access-from domain="swf.example.com" to-ports="123,456-458" /> -->

   <allow-access-from domain="*" to-ports="*" />
   <allow-http-request-headers-from domain="*" />
   <!-- <allow-http-request-headers-from domain="*" headers="*" secure="false" /> -->
</cross-domain-policy>


那我就如法炮制,在我的APP上放上这个 crossdomain.xml 文件

Glassfish V3 下页面使用 swf 时 crossdomain.xml 应放在哪里?


重新编译和部署,错误依旧。然后,就是再搜索、修改,把 crossdomain.xml 放到所有的目录,等等,花了几乎大半天时间,安全错误还是如旧。

后来仔细想了想,既然官方的指引也就是把 crossdomain.xml 放网站的根目录,为什么我就不行呢?

突然间想起,我在 Netbeans 编译和部署的 App 并不是根目录,而是 根以下的 APP 目录,我在这个目录下放的  crossdomain.xml 并不是在根目录。

Glassfish 的根是在 domain/domain1 下的 docroot, 在浏览器直接输入 http://localhost:8080 所打开的就是这 docroot 里的 index.html。

呵呵,那把 crossdomain.xml 放到 domain1/docroot 下就可以了,安全错误消失。

Glassfish V3 下页面使用 swf 时 crossdomain.xml 应放在哪里?

:-

你可能感兴趣的:(xml,socket,Flex,Netbeans,Glassfish)