GET:取消场所变更事件的方法?

时间:2013-09-07 14:10:56

标签: gwt gwt-places gwt-activities

我在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的持续请求未被取消,因此无效。 是的,当用户即将离开当前位置时,我可以检查这一点,但这不会有效,因为检查逻辑将分散在整个程序中。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你可以做一点点不同的事情。假设你想要一个名为SecuredPlace的地方只有在登录后才能访问。您有相应的SecuredActivity。

当您启动SecuredActivity时,您可以检查用户是否已登录。如果不是,则执行placeController.goTo(new LoginPlace())。

如果用户已登录,则继续。由于框架调用了开始,因此无法跳过此步骤,在我看来,这一步使其足够安全。

但是,您应该在对后端的网络呼叫上实现安全性,而不是在地方。每次调用后端时,都会检查该用户是否已通过身份验证并具有正确的凭据。如果没有,您可以拦截回调,检查它是403错误,然后自动重定向到您的登录页面。因为如果你的后端电话不安全,保护你的地方是没用的。