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

Restrict direct access of internal pages in SAPUI5 application

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

示例如下:

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

我实现了以下路由逻辑:

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

如何使用本机 UI5 工具实现此类行为?

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

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

Components.js注册一个模型loginModel:

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

this.setModel(oLoginModel, "loginModel");

如果用户有 seen/passed 您的登录页面,请将 属性 设置为 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");
    }
},

希望对您有所帮助。