2013-09-07 2 views
1

В моем проекте GWT я использую Activity/Place, если текущий пользователь не вошел в систему, когда он перейдет к некоторому Place, пользователь будет перенаправлен на страницу входа в систему, если пользователь выполнил вход в систему, то он будет доставлен в этот Place. Как эффективно реализовать эту логику?GWT: способ отмены PlaceChangeEvent?

Я попытался зацепить 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

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

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

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

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

Смежные вопросы