Необходимо установить заголовок cookie для использования AIR SWFLoader для извлечения удаленного файла Flex .swf. - PullRequest
0 голосов
/ 24 марта 2009

Я кодирую приложение AIR 1.5, в котором я хочу выполнить удаленную загрузку файла Flex .swf с веб-сервера.

Я использую Flex 3.2 SDK и пытаюсь использовать функцию под-приложения через SWFLoader. Я ссылаюсь на документ Разработка и загрузка подпрограмм о том, как это сделать.

Я действительно могу успешно загрузить файл Flex .swf с удаленного веб-сервера, и он загружается в удаленную изолированную программную среду. Рабочие формы этого файла .swf даже соответствуют настройкам прозрачности, которые я установил в собственном окне AIR.

Вот руб:

В производственной ситуации наш веб-сервер использует Spring Security для отклонения любого несанкционированного доступа к веб-странице входа в систему (это также относится и к обычным развертываниям разработки / сборки сборки QA). Если успешный вход был выполнен, то ответ входа в систему устанавливает cookie. Этот заголовок cookie должен присутствовать во всех последующих HTTP-взаимодействиях, которые направлены на получение контента с сайта.

Я не могу понять, как установить заголовок файла cookie при использовании SWFLoader для извлечения файлов Flex .swf.

Как я могу использовать SWFLoader для извлечения файлов с веб-сайта, который защищен Spring Security (который широко используется для защиты доступа к веб-сайтам на основе Java), который раньше назывался Acegi security до объединения с Spring Источник).

Запуск нашего кода на основе Flex был несложным, когда он запускался в изолированной программной среде браузера Flash Player - все, что происходило с Spring Security, управлялось браузером. Однако попытка запустить наше приложение на основе Flex в AIR в качестве вспомогательного приложения в безопасных пределах удаленной песочницы оказывается адским опытом.

Элемент управления AIR HTML, хотя он достаточно хорошо работает с Spring Security, не используется, поскольку любое загруженное содержимое .swf или .pdf не будет отображаться, если для прозрачности установлено значение true в собственном окне AIR. Наш конкретный дизайн пользовательского интерфейса обязательно требует, чтобы прозрачность была установлена ​​в значение true, поскольку мы делаем дочерние окна MDI, которые плавают на рабочем столе пользователя.

1 Ответ

0 голосов
/ 08 апреля 2009

Я решил эту проблему, связав использование элемента управления AIR HTML в сочетании с использованием SwfLoader для загрузки требуемого удаленного файла .swf.

Я написал функцию JavaScript на веб-странице HTML, которую мое приложение AIR загружает в экземпляр HTML (когда срабатывает событие завершения страницы, тогда безопасно вызывать функцию JavaScript из кода AIR Flex - код Flex может конечно, обработать событие завершения HTML).

Эта функция JavaScript использует XmlHttpRequest () для входа на веб-сайт, который использует Spring Security для авторизации. Заголовок Set-Cookie обрабатывается при успешном входе в систему. Когда ответ для XmlHttpRequest () завершен, тогда искусственное событие щелчка отправляется на фиктивном объекте DIV, который был размещен на веб-странице. Код AIR Flex может регистрировать и обрабатывать это искусственное событие щелчка.

После обработки события click код AIR Flex узнает, что безопасно приступить к созданию экземпляра SwfLoader. Когда происходит событие завершения объекта SwfLoader, ссылка на объект SwfLoader помещается в список отображения приложения AIR.

Затем пользователь видит, как удаленно загруженный SWF-файл начинает выполняться и показывает свой собственный пользовательский интерфейс. Он работает в контексте удаленной изолированной программной среды под-приложения. Функция дополнительного приложения поддерживается в Flex SDK 3.2 с помощью элемента управления SwfLoader.

Таким образом, приложение AIR управляет заголовком файла cookie, созданным элементом управления HTML. Этот заголовок cookie отправляется в HTTP-запросе элемента управления SwfLoader, когда он используется для загрузки удаленного файла .swf. Фильтр Spring Security видит это и находит запрос от сеанса аутентифицированного пользователя.

...