Tomcat Cors + Oracle ORDS блокирует мой угловой запрос

У меня есть угловой клиент, который должен получать данные из службы данных Oracle Rest Data. ORDS работает внутри кота, который обрабатывает аутентификацию.

Если я делаю запрос с завитком, он работает. У меня есть С# webapi, и я написал контроллер для получения данных из ORDS => также работает. Итак, мой угловой клиент получает данные от С# webapi => ORDS, но не напрямую от ORDS.

login(username, password) {
    let b64 = btoa(username + ':' + password);
    localStorage.setItem('currentUser', b64);
    let headers = new HttpHeaders();
    headers = headers.append('Accept', 'application/json');
    headers = headers.append('Authorization', 'Basic ' + b64);
    return this.http.get<any>(`URL to ORDS`, {headers} ).subscribe(result => {
      console.log(JSON.stringify(result));
    });
  }

мой кот web.xml:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
     <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>http://localhost:4200/</param-value>
      </init-param> 
      <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>*</param-value>
      </init-param> 
      <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>*</param-value>
      </init-param> 
      <init-param>
        <param-name>cors..support.credentials</param-name>
        <param-value>true</param-value>
      </init-param> 
      <init-param>
        <param-name>cors..preflight.maxage</param-name>
        <param-value>10</param-value>
      </init-param> 
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

На данный момент сервер возвращается

Access to XMLHttpRequest at 'URL to ORDS' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

person KnApP993    schedule 04.11.2019    source источник


Ответы (1)


Вы можете использовать API пакета ORDS, чтобы установить список разрешенных источников.

BEGIN
       ORDS.SET_MODULE_ORIGINS_ALLOWED(
              P_MODULE_NAME       => 'test',
              P_ORIGINS_ALLOWED   => 'www.thatjeffsmith.com'
       );
END;
/

Когда я делаю запрос к моему тестовому модулю с правильным заголовком Origin, мой ответ указывает, что это разрешено.

введите здесь описание изображения

Если в заголовке моего запроса указано, что я иду откуда-то не разрешенным...

введите здесь описание изображения

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

person thatjeffsmith    schedule 04.11.2019
comment
Я попробовал ваше решение, но оно все еще не работает. Вот ссылка на мой файл .har: cs.myasp.eu/portal/s/155301230701720273631 .хар - person KnApP993; 04.11.2019
comment
@KnApP993 KnApP993, в этом журнале есть только 401 по запросу HEAD, не вижу никаких проблем с cors или ресурсов ord ... - person thatjeffsmith; 04.11.2019
comment
Я исправил свою проблему до сих пор. Если я запускаю хром с параметром --disable-web-security, проблема с cors исчезает. Что это означает для моей производственной среды? Можно ли изменить это поведение на стороне клиента? - person KnApP993; 05.11.2019