我在GWT项目中使用Activity/Place
,如果当前用户未登录,当他导航到某个Place
时,如果用户已登录,则用户将重定向到登录页面在那里,他将被带到Place
。如何有效地实现这个逻辑?
我试图挂钩PlaceChangeRequestEvent:
eventBus.addHandler(PlaceChangeRequestEvent.TYPE,new PlaceChangeRequestEvent.Handler() {
@Override
public void onPlaceChangeRequest(PlaceChangeRequestEvent event) {
Place newPlace = event.getNewPlace();
if (newPlace instanceof MyProtectedPlace && userNotLoggedIn()) {
event.goTo(new LoginPlace());
}
}
});
不幸的是,由于MyProtectedPlace
的持续请求未被取消,因此无效。
是的,当用户即将离开当前位置时,我可以检查这一点,但这不会有效,因为检查逻辑将分散在整个程序中。
感谢。
答案 0 :(得分:0)
我认为你可以做一点点不同的事情。假设你想要一个名为SecuredPlace的地方只有在登录后才能访问。您有相应的SecuredActivity。
当您启动SecuredActivity时,您可以检查用户是否已登录。如果不是,则执行placeController.goTo(new LoginPlace())。
如果用户已登录,则继续。由于框架调用了开始,因此无法跳过此步骤,在我看来,这一步使其足够安全。
但是,您应该在对后端的网络呼叫上实现安全性,而不是在地方。每次调用后端时,都会检查该用户是否已通过身份验证并具有正确的凭据。如果没有,您可以拦截回调,检查它是403错误,然后自动重定向到您的登录页面。因为如果你的后端电话不安全,保护你的地方是没用的。