![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
fidel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
В веб-приложении при логине (логинятсья все юзеры) надо реализовать различные типы доступа, т.е. в зависимости от роли (админ, пользователь,продвинутый пользователь). реализавано все LoginServlet --> ControllerServlet(MVC) - который пренаправляет запросы. Например, если залогинился админ, то ему открывается админская часть и все остальные части приложения, залогинился юзер, только юзерская. Как это лучше реализовать?
Или может посоветуете где-нить скачать пример такого приложения. Заранее спасибо. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Проще реализовать в фильтре (обычно так и делается). Фильтры выполняются до сервлетов, поэтому мимо них никто не пройдет. Схема такая:
|
|||
|
||||
fidel |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
Спаибо, tux, за совет я в принципе все так и делаю, вот давайте начем с первого пункта, в пример естественно я приведу упрошенный без использования БД, есть LoginSevlet, на котором юзеры логиняться, если логин удачный то они переходят к RootControllerServlet - сервлет контролер в MVC, т.к. реализована модель MVC, нужно чтобы фильтр (SessionFilter) при попытке вызвать из RootControllerServlet какую-нить jsp (например, showUserAccounts.jsp) проверял наличие сессии, что бы нельзя было обойти процесс логона и просто в браузере набрать http://localhost:8080/app1/jsp/showUserAccounts.jsp. Мне подсказывали как это сделать на других форумах, но что то пока без результатно, может Вы поможите, итак листинги:
LoginServlet:
RootControllerServlet:
SessionFilter:
web.xml:
ну еще showUserAccounts.jsp:
Не работает, к сожалению! Подскажите, что не так? Это сообщение отредактировал(а) tux - 4.9.2006, 12:08 |
||||||||||
|
|||||||||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Вообще говоря, никакой зависимости между сервлетами и JSP нет. Откуда фильтру знать, что страница JSP по адресу http://localhost:8080/app1/jsp/showUserAccounts.jsp используется сервлетом RootControllerServlet.? А фильтр привязан у тебя только к этому сервлету. Поэтому советую повесить фильтр на все ресурсы и независимо от того что пользователь набирает и на какие ссылки переходит этот фильтр будет срабатывать и редиректить пользователя на страницу логина если он еще не вводил имя и пароль. В общем что-то такое в маппинге фильтра:
Это сообщение отредактировал(а) tux - 4.9.2006, 12:23 |
|||
|
||||
fidel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
вот бы какой-нить примерчик посмотреть
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
fidel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
пробывал, не помогает.
Вот вчера вечером мысля на меня нашла: а что если вовсе не использовать фильтр, а при логине пользователя, если логин проходит создать сессию и в нее любимую загнать все свойства пользователя, а потом на jsp проверять. Мне кажеться намного гибче система. Например, есть у меня в приложении условных 15 действий (читать разные таблицы, вносить измениния в разные таблицы) - соответственно 15 jsp-страниц. В БД в таблице users будет дополнительно 15 полей, каждое из которых будет иметь true или false. Например, страница create_new_record.jsp, будет доступна, если в сессии залогинившегося пользователя атрибут "create_new_record" имеет значение "true". Вопрос: на производительность приложения не сильно повлияет, если одновременно работает скажем 200 юзеров? Куда приложение сохраняет текущую сессию? |
|||
|
||||
tux |
|
||||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Ты скажи наконец что не получается-то. Предлагаешь на кофейной гуще погадать? У меня вот сейчас Hibernate сконфигурировать ручками не получается (как ни покажется странным), скажи, в чем причина? У тебя пользователи в RootControllerServlet попадают без логина? Так в коде фильтра ошибочка.
Здесь у тебя условие будет истинным поскольку loggedIn всегда будет равным null - в сессии ничего нет поскольку на LoginServlet не выполнялся. Что касается распределения прав доступа то на мой взгляд не самое лучшее решение. Вот смотри. Предположим, что у тебя есть страница JSP, на которой ты будешь редактировать пользователей. На нее назначаешь права для пользователей. Потом оказалось, что тебе нужно чтобы администраторы могли редактировать данные всех пользователей, а суперюзеры только данные обычных пользователей системы. И вся система безопасности сразу рушится поскольку в ее рамках разделить права ты не сможешь. Или такой вариант. Не думаю что у тебя при редактировании пользователей используется одна страница JSP - нужны как минимум форма списка пользователей, форма редактирования пользователей. Хотя можно их конечно совместить, но это не суть важно. Так вот чтобы разрешить пользователю нужное действие, нужно будет задавать права на обе страницы, что тоже не есть хорошо. Поэтому предлагаю задавать права именно на уровне действий, например, "редактирование данных пользователя", "редактирование задач", "еще чего-то" и уже в зависимости от наличия такого права решать переходить на нужную страницу или выдавать экран с ошибкой о несанкционированном доступе.
Обычно при проверке прав доступа выполняются более ресурсоемкие задачи, у тебя простое приложение. Никуда не пишет. Сессией управляет веб-контейнер - создает, удаляет, предоставляет пользователю интерфейс для работы с ней. Пользователь сессию только использует. |
||||
|
|||||
fidel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
Спасибо! Тогда такой вопрос: что значит Ваша фраза : Обычно при проверке прав доступа выполняются более ресурсоемкие задачи?
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Это значит что используемые в промышленных приложениях системы безопасности гораздо сложнее, соответственно и объемопераций при определении прав доступа выполняется гораздо больший. |
|||
|
||||
sergakrem |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.7.2006 Где: Украина, г. Киев Репутация: нет Всего: нет |
2 fidel, есть реализация такого.
Посмотри пожалуйста топик: http://forum.vingrad.ru/index.php?showtopi...st&p=844035 Судя по твоему вопросу - это именно то, что может тебе помочь. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |