我正在设计一个从不同服务器获取数据的SAP UI5应用程序。 目前,我在进行OData调用时遇到Cross Origin Error,并且在此处设置了--disable-web-security。但我想要适当的解决方案(一段代码),可用于避免此错误。
请注意,我无法对OData服务器进行任何更改。
答案 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。所有的电话都应该通过这个。