Access-Control-Allow-Origin ATG Rest API

Я создаю портал, используя angularjs и ATG Rest API, он выдает ошибку, когда я пытаюсь получить номер подтверждения сеанса, используя API: rest/model/atg/rest/SessionConfirmationActor/getSessionConfirmationNumber

Ошибка: XMLHttpRequest не может загрузить http://IPNUMBER:Port/rest/model/atg/rest/SessionConfirmationActor/getSessionConfirmationNumber. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://localhost' запрещен.

API отлично работает в POSTMAN и из прямого запроса браузера. Пожалуйста помоги мне с этим.


person Syam Nath    schedule 26.05.2016    source источник


Ответы (2)


Лучше всего написать простой сервлет Pipeline и добавить его в конфигурацию RestPipeline. Сервлет просто вставит заголовки cors во все запросы Rest.

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import atg.servlet.*;
import atg.servlet.pipeline.*;

public class CORSHeaderServlet extends InsertableServletImpl{
  public CORSHeaderServlet () {}
  public void service (DynamoHttpServletRequest request,
                       DynamoHttpServletResponse response)
       throws IOException, ServletException
  {
     //add headers to response.
    response.addHeader("Access-Control-Allow-Origin" ,"*");
    passRequest (request, response);
  }
}
person MrPsion    schedule 26.05.2016
comment
Спасибо за ответ, я использую веб-коммерцию ATG, и я включил REST API в этом, не знаю, где написать сервлет Pipeline, надеюсь, что ATG будет иметь ту же функцию где-то. - person Syam Nath; 27.05.2016
comment
Я получил один ответ с форума Oracle, но не знаю, как это сделать, вот ссылка community.oracle .com/message/13287142#13287142, в нем говорится: Расширить любой сервлет конвейера DAF (с помощью InsertableServletImpl) и установить заголовок в соответствии с бизнес-требованиями. - person Syam Nath; 27.05.2016

Я не использовал этот API, но проблема довольно распространена. Посмотрите, например, здесь (или любой другой источник о CORS):

Как работает заголовок Access-Control-Allow-Origin?

Если ваше веб-приложение и служба имеют разные домены (происхождения), это не будет работать, пока служба не разрешит вашему приложению запрашивать данные. Когда вы используете Postman, это работает, потому что Postman не отправляет заголовок или использует источник, что разрешено. Я действительно не знаю, как это работает, но это работает, и это нормально.

Если вы используете локально размещенное приложение только для целей тестирования, а служба и приложение будут иметь одно и то же происхождение, у вас есть два простых решения:

  1. Вы можете запустить веб-браузер (например, Chrome) с отключенной веб-безопасностью: Отключить политику того же источника в Chrome . Это отключает CORS и устраняет проблему.
  2. Вы можете установить расширение Chrome под названием Allow-Control-Allow-Origin: *. Когда он включен, он отправляет источник, который будет разрешен службой.

Однако, если ваша служба будет иметь другое происхождение, вам придется настроить ее, чтобы ваше приложение могло запрашивать ее.


Изменить

Обратите внимание на одну вещь. Если вы отправляете запрос, отличный от GET, или с некоторыми пользовательскими заголовками, браузеры сначала отправят запрос OPTIONS. Это называется предварительным запросом. Ваш сервис должен будет справиться с этим, чтобы работать должным образом.

person PJDev    schedule 26.05.2016
comment
Я использую WEB LOGIC. Нужно ли мне что-то менять в конфигурации ATG API или WEB LOGIC, чтобы это заработало? Потому что у меня есть приложение для Android для подключения к тому же API. В противном случае я бы разместил проект Angular на том же сервере :) - person Syam Nath; 26.05.2016
comment
Как я уже сказал, я не знаю API, поэтому не могу точно сказать, что делать. Я могу сказать, что цель состоит в том, чтобы ответы из заголовка отправки сервиса выглядели так: Access-Control-Allow-Origin: *. * позволяет всем приложениям запрашивать службу. Вместо * можно ввести конкретное доменное имя. Я думаю, должно быть что-то в конфигурации API, чтобы разрешить это. Если нет, вы, вероятно, могли бы добавить заголовок вручную к каждому ответу (например, используя некоторое наследование). Или, может быть, использовать какой-то фильтр - я сейчас только догадываюсь. Не забудьте добавить его также в запрос OPTIONS, чтобы он работал. - person PJDev; 26.05.2016
comment
Но я новичок в weblogic, пожалуйста, помогите мне настроить группу безопасности weblogic или добавить Access-Control-Allow-Origin: * в weblogic - person Syam Nath; 26.05.2016