Мое приложение имеет некоторые функции, которые доступны всем пользователям, а также некоторые другие функции, доступ к которым должен быть ограничен только аутентифицированным пользователям.Все эти ограниченные функции существуют в некотором наборе Мест GWT, поэтому все Места, доступные в приложении, можно разделить на две группы: «доступные для всех» и «ограниченные».На мой взгляд, места с ограниченным доступом могут реализовывать некоторый интерфейс (скажем, это будет RestrictedAccess
), и если пользователь перейдет к одному из них, и он еще не прошел проверку подлинности, он будет перенаправлен на экран входа в систему -это скорее ОО-подход, чем применение фильтров на основе URL.
То, чего я пытаюсь добиться, это:
- Информация о том, прошел ли пользователь аутентификацию или нет, должна храниться на сервере (это не то, что может быть сохранено в cookie-файле...)
- Страница входа - это стандартное место GWT + просмотр + активность (!)
- Проверка имени пользователя и пароля выполняется на стороне сервера.
До сих пор я представил интерфейс RestrictedAccess
, который реализован в некоторых местах.Моя реализация FilteredActivityMapper.Filter
, которая передается в маппер активности приложения-оболочки FilteredActivityMapper, имеет следующую логику:
Place filter(Place place) {
if (place instanceof RestrictedAccess && !userHasBeenAuthenticated()) {
return new LoginPlace();
}
// return the original place - user has been already authenticated or
// place is accesible for all users
return place;
}
private boolean userHasBeenAuthenticated() {
// remote call - how to do ???
}
Проблема связана с методом userHasBeenAuthenticated()
(пользователь не должен быть перенаправлен на LoginPlace, если онуже был аутентифицирован).Если я хочу сохранить эту информацию на стороне сервера, я должен выполнить GWT RPC / вызов фабрики запросов здесь, но оба они асинхронные, поэтому я не могу работать с его результатом в методе filter
.
Я знаю, что могу использовать фильтры web.xml или какую-то внешнюю среду (например, Spring Security), но ни один из этих подходов не позволяет мне иметь страницу входа в качестве стандартной формы на основе GWT или указывать более OO-способом, что доступ к некоторымместо должно быть ограничено.
Заранее благодарен за любые подсказки
РЕДАКТИРОВАТЬ : я начал задаваться вопросом, должна ли происходить фильтрация мест (ограниченная / не ограниченная) нана стороне клиента вообще.Если, как было предложено, существует возможность взломать код, указывающий, прошел ли пользователь проверку подлинности или нет, существует также возможность взломать места фильтрации кода, чтобы можно было получить доступ к закрытым местам без входа в систему.