angular - Tomcat Cors + Oracle ORDS 阻止了我的角度请求
问题描述
我有一个角度客户端,它应该从 Oracle Rest 数据服务中获取数据。ORDS 在处理身份验证的 tomcat 中运行。
如果我用 curl 提出请求,它可以工作。我有 ac# webapi,我编写了一个控制器来从 ORDS => 获取数据也可以工作。所以我的角度客户端从 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));
});
}
我的tomcat 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.
解决方案
您可以使用 ORDS 包 API 设置允许的来源列表
BEGIN
ORDS.SET_MODULE_ORIGINS_ALLOWED(
P_MODULE_NAME => 'test',
P_ORIGINS_ALLOWED => 'www.thatjeffsmith.com'
);
END;
/
当我使用正确的 Origin 标头向我的测试模块发出请求时,我的响应表明它已被允许
如果我的请求标头表明我来自不允许的地方...
它可以很简单,但通常还有很多事情要做。当我们获得HAR(网络请求日志)时,最容易调试