Tomcat Cors + Oracle ORDS正在阻止我的Angular 请求

rkttyhzu  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(142)

我有一个Angular 客户端,它应该从Oracle Rest数据服务获取数据。
我有一个C# webapi,我写了一个控制器来从ORDS获取数据=〉也能工作。所以我的Angular 客户端从C# 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));
    });
  }

我tomcatweb.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.
8zzbczxx

8zzbczxx1#

可以使用ORDS程序包API设置允许的来源列表

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

当我用正确的Origin头向我的测试模块发出请求时,我的响应表明它被允许了

如果我的请求标头显示我来自不允许的地方...

它可以很简单,但通常还有很多其他的事情要做。当我们得到一个HAR(网络请求的日志)时,调试是最容易的。

oprakyz7

oprakyz72#

Oracle提供了一个配置参数以避免ORDS应用程序中出现CORS问题。请在config目录下创建的defaults.xml中使用该参数。

<entry key="security.externalSessionTrustedOrigins">http://www.example.com</entry>

但是,这是从ORDS20.4版本支持的。对于以下版本,CORS将从客户端处理。

相关问题