GWT: способ отменить PlaceChangeEvent?

Я использую Activity/Place в моем проекте GWT, если текущий пользователь не вошел в систему, когда он переходит к некоторым 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 ответ

Вы можете сделать это немного по-другому, я думаю. Допустим, вы хотите, чтобы место с именем SecuredPlace было доступно только после входа в систему. У вас есть соответствующий SecuredActivity.

Что вы можете сделать, так это то, что когда вы запускаете SecuredActivity, вы проверяете, вошел ли ваш пользователь в систему. Если нет, вы делаете placeController.goTo(новый LoginPlace ()).

Если пользователь вошел в систему, то вы продолжите. Поскольку начало вызывается фреймворком, нет способа пропустить этот шаг, что, на мой взгляд, делает его достаточно безопасным.

Но вы должны реализовать свою безопасность при сетевых вызовах на сервер, а не на местах. Каждый раз, когда вы вызываете бэкэнд, вы проверяете, что пользователь аутентифицирован и имеет правильные учетные данные. Если нет, вы можете перехватить обратный вызов, убедитесь, что это ошибка 403, а затем автоматически перенаправить на свою страницу входа. Потому что, если ваши внутренние вызовы не защищены, защита ваших мест бесполезна.

Другие вопросы по тегам