限制SAPUI5应用程序中内部页面的直接访问

时间:2019-03-16 16:52:21

标签: sapui5

在我的UI5应用程序中,我必须确保,如果用户关闭一个选项卡,然后打开一个新的选项卡,并将直接链接粘贴到该页面的内部页面,则该应用程序会将其路由到登录页面。

这里是示例:

  1. 用户进入以下视图并复制直接链接,例如https://myapp/#/productsList
  2. 用户关闭标签页
  3. 用户打开一个新标签并将链接粘贴到该标签。
    我想确保该应用程序会将他路由到登录页面:https://myapp.com

我实现了以下路由逻辑:

"routes": [{
    "pattern": "",
    "name": "login",
    "target": "login"
},…]
…
"targets": {
    "login": {
        "viewID": "login",
        "viewName": "Login"
    },…
}

如何使用本机UI5工具实现这种行为?

1 个答案:

答案 0 :(得分:1)

我认为这不能通过在 Manifest.json 中配置路由来实现。通常,用户的登录和授权应由服务器本身处理:例如Apache,Tomcat或Nginx,或任何其他OpenID或OAuth解决方案。例如,Nginx documentation

回到您的问题,这是一个简单的解决方案,用于检查用户是否已经通过/已经看到登录页面。我将通过以下方式实现它。

Components.js 中注册模型loginModel

let oLoginModel = new JSONModel({
    bUserLoggedIn = false;
});

this.setModel(oLoginModel, "loginModel");

如果用户已经查看/通过了您的登录页面,请将属性设置为true

Manifest.json 中定义其他路线。在视图的控制器中,在onInit上附加一个侦听器,并检查用户是否已查看登录页面,如果没有浏览则直接登录:

onInit: function() {
    this.getRouter().getRoute("sampleRoute")
        .attachPatternMatched(this._onRouteMatched, this);
},

_onRouteMatched: function(oEvent) {
    if (!this.getModel("loginModel").getProperty("/bUserLoggedIn")) {
        let oRouter = sap.ui.core.UIComponent.getRouterFor(this);
        oRouter.navTo("login");
    }
},

希望有帮助。