在进行 oData 调用之前检查会话 - HANA 云门户

Check session before making oData calls - HANA Cloud Portal

我正在使用 HCP 门户 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 调用,是否有直接的方法来实现它?

您可以在 成功回调函数 中检查 HTTP 响应的值 header "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)
       }         
     }
  });  

如果遇到过超时调用成功回调函数的情况;但我也看到过错误回调函数被调用的情况;因此我在这两种情况下都检查超时。

超时处理可能是一个对话框,告诉用户 session 已超时并询问他是否要重新启动应用程序。