Запрос GET от почтальона к формам AEM работает, но не работает из-за CORS из Ajax вызова с другого веб-сайта - PullRequest
1 голос
/ 14 июля 2020

Я использую следующий вызов 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: Сейчас работает. Проверьте следующее:

  1. CORS необходимо настроить в экземпляре publi sh, а не в экземпляре автора.

  2. Go для configMgr> Политика совместного использования ресурсов Adobe Granite для разных источников. Добавьте необходимый элемент заголовка, переданный в вызове Ajax, в объект заголовков, добавьте его к поддерживаемым заголовкам и добавьте разрешенные методы (GET, OPTIONS ... et c). Конечно, вы должны разрешить Origin по мере необходимости.

  3. Попали в configMgr> Apache Sling Referrer Filter и удалите разрешенные методы из методов фильтрации. Обязательно удалите разрешенные методы из «методов фильтрации». Убедитесь, что метод OPTIONS разрешен в обоих случаях. Настройте другие части по мере необходимости.

  4. Проверьте обновленный Ajax вызов выше.

Если все еще не работает, включите DEBUG для CORS в разделе логгера. Если вам нужна помощь, отправьте мне сообщение.

Все еще в ожидании:

Теперь полученный ответ - идеальный HTML, но все URL-ссылки являются относительными. Уловка теперь в том, как сделать их абсолютными для сервера AEM или как заставить вызов Ajax возвращать абсолютные ссылки для ВСЕХ URL-адресов? Затем в справочном документе Adobe упомяните кое-что об обратном прокси. Есть еще одна идея?

Мы думали об использовании iFrame, но теперь проблема в том, что после того, как данные были введены в форму, нам нужно передать управление обратно в ведущее приложение и передать данные формы обратно в хост-приложение. Нам нужно использовать какой-то метод обратного вызова или перейти к URL-адресу. Но при использовании iFrame похоже, что это невозможно. Использование Ajax позволяет встроить HTML как внутренний HTML внутри элемента DIV в главном приложении. Сейчас мы пытаемся проанализировать результат HTML, чтобы заменить все URL-адреса внутри HTML на абсолютные. Я просто думаю, есть ли другие варианты.

Первоначальное тестирование после использования Ajax HTML ответа и синтаксического анализа всех URL-адресов, чтобы быть абсолютными, похоже, пока работает с некоторыми незначительными проблемами.

Тарек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...