Ситуация была проста:
1) SWF грузится из одного домена по HTTP:
http://shdom1:8082/ui/soaptest.swf
2) И он должен пользоваться SOAP Web Services из другого домена HTTPS:
https://shdom2:8443/ws/Appl?wsdl
И оно конечно же не грузится:
- причем выдает нечто невинное "Error #2170: Security sandbox violation: http://localhost:8080/acwui/ACWMain.swf cannot send HTTP headers to https://localhost:8443/acw/Application."
faultCode = "Channel.Security.Error"
faultDetail = "Destination: DefaultHTTP"
faultString = "Security error accessing url"
message = "faultCode:Channel.Security.Error faultString:'Security error accessing url' faultDetail:'Destination: DefaultHTTP'"
Но на самом деле, после глубинного дебага, видим root cause "Error #2048: Security sandbox violation: http://localhost:8082/acwui/soaptest.swf?debug=true cannot load data from https://localhost:8443/acw/Application?wsdl"
Перечитываем до дыр описание файла доменных политик crossdomain.xml
Узнаем все необходимое:
- и про мета-полиси в мастер файле (permitted-cross-domain-policies=«all»)
- и про доступ на HTTPS домены (security=«false»)
- и про хедеры SOAP Сервисов (
)
То есть все делалось правильно и в соответствии с документацией
http://www.senocular.com/pub/adobe/crossdomain/policyfiles.html
Мастер crossdomain.xml максимально разрешающий выглядит так:
Но все равно ничего не работает...
Итого - потрачено больше двух дней, перечитана до дыр документация по политикам безопасности, сделано два тестовых прототипа, перепробованы различные версии Flex SDK, а заодно научились JBoss хачить - и вуаля:
Проблема заключалась в том что по умолчанию JBoss7 отдавал нам этот файл из корня сервера (welcome-content) без http хэдера Content-Type !!!
А без этого HTTP хедера оно этот мастер кроссдомен просто игнорило. А так как по умолчанию считается что
Но как только мы подхачили этот чудный JBoss7 чтобы он отдавал кроссдомену нормальный Content-Type: application/xml ,то тут же все заработало!!!
Делается это так:
1) Выключаем в jboss-7.1.1\standalone\configuration\standalone.xml использование "welcome-content"
- \ROOT.war\WEB-INF\web.xml
- \ROOT.war\crossdomain.xml
3) диплоим его - для этого нужно поместить его в диплой (и возможно создать там файл ROOT.war.dodeploy )
Готово. Наслаждайтесь вашими кроссдоменными коммуникациями. (Кстати - нормальный томкат отдает нормальный контент тайп сразу - из пакета).
Собственно на правильную мысль натолкнули следующие два факта:
- в документации про мета политики мастера кроссдомена, есть упоминание о таком режиме безопасности при ктором правильными считаются только такие crossdomain.xml у которых Content-Type: text/x-cross-domain-policy
- потом я начал экспериментировть с другим вебсервером - взял обычный Tomcat вместо JBoss7 - и обнаружил что на томкате оно работает.