限制直接访问SAPUI5应用程序中的内部页面
在我的UI5应用程序中,我必须确保如果用户关闭一个选项卡,然后打开一个新选项卡,并将一个直接链接粘贴到一个内部页面,那么应用程序会将用户路由到登录页面 以下是一个例子:限制直接访问SAPUI5应用程序中的内部页面,sapui5,Sapui5,在我的UI5应用程序中,我必须确保如果用户关闭一个选项卡,然后打开一个新选项卡,并将一个直接链接粘贴到一个内部页面,那么应用程序会将用户路由到登录页面 以下是一个例子: 用户进入以下视图并复制直接链接,例如,https://myapp/#/productsList 用户关闭选项卡 用户打开一个新选项卡并将链接粘贴到那里。 我想确保应用程序将他路由到登录页面:https://myapp.com 我实现了以下路由逻辑: “路由”:[{ “图案”:“图案”, “名称”:“登录”, “目标”:“登录”
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中操作。谢谢!我同意,所有与安全相关的功能都必须以适当的方式实现,并依赖服务器端作为唯一受信任的节点。