Flex跨域訪問(wèn)沙箱問(wèn)題解決方案
本文和大家重點(diǎn)討論一下Flex跨域訪問(wèn)的沙箱問(wèn)題,當(dāng)Flex訪問(wèn)WebService服務(wù)時(shí),在本地能夠正常訪問(wèn),當(dāng)部署到web容器中發(fā)布為web服務(wù)后,再調(diào)用WebServicIE,此時(shí)就會(huì)被拒絕訪問(wèn),這就是Flex跨域訪問(wèn)的沙箱問(wèn)題,下面介紹一下解決方案。
Flex跨域訪問(wèn)的沙箱問(wèn)題
當(dāng)Flex訪問(wèn)WebService服務(wù)時(shí),在本地能夠正常訪問(wèn),當(dāng)部署到web容器中發(fā)布為web服務(wù)后,再調(diào)用WebServicIE,此時(shí)就會(huì)被拒絕訪問(wèn),這就是Flex跨域訪問(wèn)的沙箱問(wèn)題,為了解決Flex跨域訪問(wèn)WebService的問(wèn)題,可采用如下方案:
首先,F(xiàn)lex跨域訪問(wèn)被拒絕是因?yàn)樘峁┓?wù)方?jīng)]有配置安全策略文件,即crossdomain.xml,如果你不想用crossdomain.xml就要用到代理,即自己寫(xiě)一個(gè)后臺(tái)讀取webservice,然后提供給自己的flex應(yīng)用,因?yàn)樵趂lashplayer中,要Flex跨域必須要有策略文件??紤]到flashplayer升級(jí)到9.124之后,加強(qiáng)了安全性,之前的crossdomain.xml的寫(xiě)法發(fā)生了變化,以下就是該文件的完整寫(xiě)法:
- <?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>
表示該服務(wù)允許任何外域來(lái)訪問(wèn)。
關(guān)于crossdomain.xml的放置目錄問(wèn)題,有如下解決方案,可放置在:
1)如果這個(gè)目錄是容器的根目錄,可以通過(guò)以下的url訪問(wèn)crossdomain.xml:
http://localhost:8080/crossdomain.xml。
2)如果crossdomain.xml不是放在根目錄下,而是在某個(gè)webapp下面,在flex中就需要在初始化的時(shí)候應(yīng)用
Security.loadPolicyFile("http://localhost:8080/xx/crossdomain.xml");
其中xx為webapp的名稱(chēng)
這樣,外部Flex跨域訪問(wèn)該服務(wù)發(fā)布的WebService時(shí),flashplayer首先找的就是crossdomain.xml文件,若安全機(jī)制設(shè)置為允許訪問(wèn),則訪問(wèn)成功。
【編輯推薦】