如何在Javascript(Chrome)中禁用相同的原始策略

时间:2017-09-11 11:28:43

标签: javascript cors sapui5

我正在设计一个从不同服务器获取数据的SAP UI5应用程序。 目前,我在进行OData调用时遇到Cross Origin Error,并且在此处设置了--disable-web-security。但我想要适当的解决方案(一段代码),可用于避免此错误。

请注意,我无法对OData服务器进行任何更改。

2 个答案:

答案 0 :(得分:0)

您必须使用代理Servlet来修复您的CORS问题。 在manifest.json文件的config json中添加指向odata服务或数据提供者的链接,例如:

"config": {
  "oDataRemote": "http://exampleService.com/sap/opu/odata/sap/<ServiceName>",
  "oDataProxyRemote": "proxy/sap/opu/odata/sap/<ServiceName>",
}

在您的Components.js中获取URL链接并启动您的oData Model:

var oConfig = this.getMetadata().getConfig(); //get variables of config json defined in manifest.json

    // Define if proxy is required or not
    if (window.location.hostname == "localhost") {
          sServiceUrl = oConfig.oDataProxyRemote;
      } else {
          sServiceUrl = oConfig.oDataRemote;
      } 

确定uri后,在components.js中启动odata模型:

var oODataModel = new sap.ui.model.odata.ODataModel(sServiceUrl, mParameters);
this.setModel(oODataModel, "oDataModel");

在WEB-INF文件夹中,您需要将以下servlet添加到web.xml:

<!-- ============================================================== -->
<!-- UI5 proxy servlet -->
<!-- ============================================================== -->

<servlet>
    <servlet-name>SimpleProxyServlet</servlet-name>
    <servlet-class>com.sap.ui5.proxy.SimpleProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SimpleProxyServlet</servlet-name>
    <url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>com.sap.ui5.proxy.REMOTE_LOCATION</param-name>
    <param-value>{protocol}://{host name}:{port number}</param-value>
</context-param> 

简单代理servlet仅用于测试目的。如果您的生产环境需要这个,那么您需要一个成熟的代理servlet。我建议使用反向代理(例如Apache HTTP Server),将所有Web服务器和应用程序服务器放在一个域中。

您还可以查看SAP simple proxy servlet

提供的示例

答案 1 :(得分:0)

您应该在服务器端设置反向代理。你应该通过这个来调用外部URL。所有的电话都应该通过这个。