Я использую следующий вызов Ajax с внешнего веб-сайта, чтобы встроить форму AEM в основное приложение (внешний веб-сайт). Вызов Ajax завершается ошибкой CORS. Тот же запрос GET от Postman выполнен успешно. Запрос GET отправляется экземпляру JEE AEM Author на основе CentOS 7.
Я выполнил тот же вызов Ajax с другой веб-страницы формы AEM и получил правильный ответ.
Я сделал выполните все возможное, чтобы включить CORS в AEM, см. интерактивные документы, за которыми я следил:
https://docs.adobe.com/content/help/en/experience-manager-65/forms/adaptive-forms-basic-authoring/embed-adaptive-form-external-web-page.html
https://docs.adobe.com/content/help/en/experience-manager-learn/foundation/security/develop-for-cross-origin-resource-sharing.html
https://docs.adobe.com/content/help/en/experience-manager-learn/foundation/security/understand-cross-origin-resource-sharing.html
Ajax Вызов API:
$.ajax
({
type: "GET",
url: "http://ame_publish:4003/content/forms/af/path_to_aem_form/form_name.html/jcr:content/guideContainer.html",
data: {wcmmode:"disabled", key:"some key values"},
headers: {token:"token value in the header section"},
success: function (prmResults){
console.log('GET Response, prmResults = ', prmResults);
},
error: function(prmErr){console.log("Error:", prmErr);},
fail: function(){console.log("Fail: ", prmErr)}
});
Вопросы:
- Что еще я пропустил для включения CORS на AEM?
- Почему Postman работает нормально, но не работает при вызове с другого веб-сайта?
- Когда возвращается ответ, это HTML со ссылками на ресурсы, размещенные на Сервер форм AEM. Такими ресурсами могут быть CSS, JS и изображения. Как такие ресурсы могут быть сопоставлены с хост-приложением, которое вызвало API. Если к таким ресурсам невозможно получить доступ из хостинг-приложения, форма AEM будет повреждена.
Благодарю за вашу помощь.
ОБНОВЛЕНИЕ 1: Сейчас работает. Проверьте следующее:
CORS необходимо настроить в экземпляре publi sh, а не в экземпляре автора.
Go для configMgr> Политика совместного использования ресурсов Adobe Granite для разных источников. Добавьте необходимый элемент заголовка, переданный в вызове Ajax, в объект заголовков, добавьте его к поддерживаемым заголовкам и добавьте разрешенные методы (GET, OPTIONS ... et c). Конечно, вы должны разрешить Origin по мере необходимости.
Попали в configMgr> Apache Sling Referrer Filter и удалите разрешенные методы из методов фильтрации. Обязательно удалите разрешенные методы из «методов фильтрации». Убедитесь, что метод OPTIONS разрешен в обоих случаях. Настройте другие части по мере необходимости.
Проверьте обновленный Ajax вызов выше.
Если все еще не работает, включите DEBUG для CORS в разделе логгера. Если вам нужна помощь, отправьте мне сообщение.
Все еще в ожидании:
Теперь полученный ответ - идеальный HTML, но все URL-ссылки являются относительными. Уловка теперь в том, как сделать их абсолютными для сервера AEM или как заставить вызов Ajax возвращать абсолютные ссылки для ВСЕХ URL-адресов? Затем в справочном документе Adobe упомяните кое-что об обратном прокси. Есть еще одна идея?
Мы думали об использовании iFrame, но теперь проблема в том, что после того, как данные были введены в форму, нам нужно передать управление обратно в ведущее приложение и передать данные формы обратно в хост-приложение. Нам нужно использовать какой-то метод обратного вызова или перейти к URL-адресу. Но при использовании iFrame похоже, что это невозможно. Использование Ajax позволяет встроить HTML как внутренний HTML внутри элемента DIV в главном приложении. Сейчас мы пытаемся проанализировать результат HTML, чтобы заменить все URL-адреса внутри HTML на абсолютные. Я просто думаю, есть ли другие варианты.
Первоначальное тестирование после использования Ajax HTML ответа и синтаксического анализа всех URL-адресов, чтобы быть абсолютными, похоже, пока работает с некоторыми незначительными проблемами.
Тарек