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

限制直接访问SAPUI5应用程序中的内部页面,sapui5,Sapui5,在我的UI5应用程序中,我必须确保如果用户关闭一个选项卡,然后打开一个新选项卡,并将一个直接链接粘贴到一个内部页面,那么应用程序会将用户路由到登录页面 以下是一个例子: 用户进入以下视图并复制直接链接,例如,https://myapp/#/productsList 用户关闭选项卡 用户打开一个新选项卡并将链接粘贴到那里。 我想确保应用程序将他路由到登录页面:https://myapp.com 我实现了以下路由逻辑: “路由”:[{ “图案”:“图案”, “名称”:“登录”, “目标”:“登录”

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

以下是一个例子:

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

    “路由”:[{
    “图案”:“图案”,
    “名称”:“登录”,
    “目标”:“登录”
    },…]
    …
    “目标”:{
    “登录”:{
    “视图ID”:“登录”,
    “视图名称”:“登录”
    },…
    }
    

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

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

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

    在Components.js中注册一个模型
    loginModel

    let-oLoginModel=new-JSONModel({
    bUserLoggedIn=假;
    });
    这个.setModel(loginModel,“loginModel”);
    
    如果用户看到/通过了您的登录页面,请将属性设置为
    true

    在Manifest.json中定义其他路由。在视图的控制器中,在
    onInit
    中附加一个侦听器,并检查用户是否已看到登录页面,如果未导航到直接登录:

    onInit:function(){
    this.getRouter().getRoute(“sampleRoute”)
    .AttachPattern匹配(此.\u on RouteMatched,此);
    },
    _onRouteMatched:功能(oEvent){
    if(!this.getModel(“loginModel”).getProperty(“/bUserLoggedIn”)){
    让oRouter=sap.ui.core.UIComponent.getRouterFor(this);
    oRouter.navTo(“登录”);
    }
    },
    

    希望这能有所帮助。

    对于这种方法,我有一个顾虑:如果用户通过DevTools更改
    bUserLoggedIn
    的值,会发生什么?这项技术安全可靠吗?嗨,不,它绝对不安全可靠。一个安全可靠的解决方案检查安全令牌、cookie、会话cookie,它们是由我在文章中提到的服务器发出的。这只是在sapui5应用程序中有某种匿名或登录区域的一种方式。最好的解决方案是在服务器端进行身份验证,成功登录后,您就拥有了您的UI5应用程序内容,无论是登录还是注销都没有区别。然后一切都安全了,没有人可以在devTools中操作。谢谢!我同意,所有与安全相关的功能都必须以适当的方式实现,并依赖服务器端作为唯一受信任的节点。