關於flex的crossdomain.xml文件存放目錄


  最近在項目中遇到flex跨域訪問的安全沙箱問題,查資料了解到需要在服務端加上crossdomain.xml文件,即:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*"/>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

       但對於具體存放在web服務的那個目錄下,一直困惑不已,最終發現,這需存放在你服務器的默認站點目錄下,一般情況下,目錄站點都是Root;tomcat中存放在

webapps/ROOT/ 下,即所謂的根目錄;jboss存放目錄也很類似,也是放在默認站點root目錄下,以我機器為例,存放在:C:\jboss-4.0.5.GA\server\default\deploy\jbossweb-tomcat55.sar\ROOT.war中的Root.war中;

倘若你的tomcat 或者jboss中沒有默認站點Root,那crossdomain.xml需要放在哪里呢?

兩種處理辦法:1.拷貝一個Root站點到你的tomcat或者jboss中,再在其中加入crossdomain.xml;

2.如果你的tomcat或者jboss的默認站點已經設置成了其他的應用,則你需要將crossdomain.xml放置到這些個具體的默認站點中去;

一言以蔽之,crossdomain.xml需要存放在你默認站點的根目錄下,檢驗你的crossdomain.xml是否放置正確,你可以通過用http://domainname/crossdomain.xml這種方式訪問即可(切記不要加應用名),以我機器為例:

http://127.0.0.1:8080/crossdomain.xml,如果可以訪問到到該xml 就可以了。

當然在這個過程中我不得不再提醒你一個很值得你注意的地方:在做所有工作之前請把你的瀏覽器緩存clear掉,因為我在實踐當中該死的緩存幾乎差點讓我懷疑自己,差點讓我不知所措!

 

ps: adobe默認的策略文件還提供了另一種訪問機制,即他可以用Security.loadPolicyFile方法加載指定目錄下的crossdomain,但是在某個版本后,就要求在服務器根目錄下必須有crossdomain文件了,官方文檔解釋如下: 
SWF 文件可以通過調用 Security.loadPolicyFile() 方法檢索其它策略文件名或其它目錄位置。但是,如果主策略文件未指定目標位置能提供策略文件,則調用loadPolicyFile() 無效,即使該位置有策略文件。 
http://help.adobe.com/zh_CN/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e08.html

因此,如果你的站點訪問存在安全沙箱問題,無論如何你的默認站點下都需要放置crossdomain.xml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM