我正在使用HCP Portal SAPUI5应用程序。我需要在对后端进行每次数据调用之前检查会话,以便我可以将用户重定向回登录页面。
在HANA Cloud文档中,提供了以下代码:
jQuery(document).ajaxComplete(function(e, jqXHR) {
if (jqXHR.getResponseHeader("com.sap.cloud.security.login")) {
alert("Session is expired, page shall be reloaded.");
jQuery.sap.delayedCall(0, this, function() {
location.reload(true);
});
}
});

但上面的代码仅适用于Ajax调用。我不确定odata是否同样适用。我们希望在会话到期后在每个场景中重定向用户。 是否有直接的方法来实现数据调用和Ajax调用?
答案 0 :(得分:1)
您可以检查成功回调函数以获取HTTP响应标头"com.sap.cloud.security.login"
的值:
sap.ui.getCore().getModel().read("/SOME_ENTITYSet", {
success: function(odata, response) {
if (response.headers["com.sap.cloud.security.login"] === "login-request") {
// Timeout handling
} else {
// Process data in argument odata
}
},
error: function(error) {
if (response.headers["com.sap.cloud.security.login"] === "login-request") {
// Timeout handling
} else {
// Show error message (for non-timeout errors)
}
}
});
如果遇到超时的情况,则调用成功回调函数;但我也看到了调用错误回调函数的情况;因此我检查了两种情况都是暂停。
超时处理可能是一个对话框,告诉用户会话超时并询问他是否要重新启动应用程序。