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

问题描述 投票:1回答:1

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

这是一个例子:

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

我实现了以下路由逻辑:

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

如何使用原生UI5工具实现此类行为?

sapui5
1个回答
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");
    }
},

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.