Flex跨域訪問沙箱問題解決方案
本文和大家重點討論一下Flex跨域訪問的沙箱問題,當Flex訪問WebService服務時,在本地能夠正常訪問,當部署到web容器中發布為web服務后,再調用WebServicIE,此時就會被拒絕訪問,這就是Flex跨域訪問的沙箱問題,下面介紹一下解決方案。
Flex跨域訪問的沙箱問題
當Flex訪問WebService服務時,在本地能夠正常訪問,當部署到web容器中發布為web服務后,再調用WebServicIE,此時就會被拒絕訪問,這就是Flex跨域訪問的沙箱問題,為了解決Flex跨域訪問WebService的問題,可采用如下方案:
首先,Flex跨域訪問被拒絕是因為提供服務方沒有配置安全策略文件,即crossdomain.xml,如果你不想用crossdomain.xml就要用到代理,即自己寫一個后臺讀取webservice,然后提供給自己的flex應用,因為在flashplayer中,要Flex跨域必須要有策略文件。考慮到flashplayer升級到9.124之后,加強了安全性,之前的crossdomain.xml的寫法發生了變化,以下就是該文件的完整寫法:
- <?xmlversionxmlversion="1.0"?>
- <!DOCTYPEcross-domain-policySYSTEM"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
- <cross-domain-policy>
- <allow-access-fromdomainallow-access-fromdomain="*"/>
- <allow-http-request-headers-fromdomainallow-http-request-headers-fromdomain="*"headers="*"/>
- </cross-domain-policy>
表示該服務允許任何外域來訪問。
關于crossdomain.xml的放置目錄問題,有如下解決方案,可放置在:
1)如果這個目錄是容器的根目錄,可以通過以下的url訪問crossdomain.xml:
http://localhost:8080/crossdomain.xml。
2)如果crossdomain.xml不是放在根目錄下,而是在某個webapp下面,在flex中就需要在初始化的時候應用
Security.loadPolicyFile("http://localhost:8080/xx/crossdomain.xml");
其中xx為webapp的名稱
這樣,外部Flex跨域訪問該服務發布的WebService時,flashplayer首先找的就是crossdomain.xml文件,若安全機制設置為允許訪問,則訪問成功。
【編輯推薦】