![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
eugeneu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.3.2011 Репутация: нет Всего: нет |
Здравствуйте! Я новичек в Spring Security.
Использую в проекте Spring MVC 3, и Spring Security 3 на tomcat 6. Когда пользователь авторизуется в системе, UserDetails выдает список РОЛЕЙ(ROLE_) - GrantedAuthorities для этого пользователя. Соответственно я могу ограничивать доступ r страницам приложения, написав например: <intercept-url pattern="/page1.html" access="ROLE_USER,ROLE_MANAGER" /> <intercept-url pattern="/page2.html" access="ROLE_ADMIN" /> Получается, что если я заведу новую роль - придется менять код приложения. А очень хотелось бы сделать вот так, но я незнаю как это реализовать: <intercept-url pattern="/page1.html" access="PERM_PAGE1" /> <intercept-url pattern="/page2.html" access="PERM_PAGE2" /> То есть создать ПЕРМИШЕНЫ вместо РОЛЕЙ на каждую страничку и привязывать их к пользователю. А так же использовать ПЕРМИШЕНЫ в конструкциях типа ifHasRole("ROLE_") - аналогично сделать для пермишенов, то есть давать доступ например на элемент управления на странице не по РОЛИ а именно по ПЕРМИШЕНУ иначе опять же придется менять код приложения... Заранее спасибо, буду рад вашим ответам. |
|||
|
||||
MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет. Возможно в данном случае тебе поможет использовать вместо обычных выражений access expressions:
И тебе надо будет еще отнаследовать и проконфигурить пару классов: org.springframework.security.web.access.expression.WebSecurityExpressionRoot переписать его метод :
На проверку твоих пермишенов. Или попробуй в твоем наследнике написать новый метод, который ты и будешь использовать в security-expresions, все равно инстанс этого класса потом проставляется как root в EvaluationContext внутри: org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler который тоже нужно подправить. И проставить его при конфигурации бина org.springframework.security.web.access.expression.WebExpressionVoter Это первая часть. По TLD: никогда не пользовался - надо смотреть исходники, что там твориться. Но думаю, тоже что-то надо будет переписать, или свой кастомный тег написать, который будет трекать твою логику Это сообщение отредактировал(а) MisterCleric - 28.3.2011, 11:53 -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
eugeneu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.3.2011 Репутация: нет Всего: нет |
Огромное спасибо, MisterCleric. Буду копать...
Я уже подумывал свой spring security писать... |
|||
|
||||
eugeneu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.3.2011 Репутация: нет Всего: нет |
Еще хотел спросить у вас форумчане.
Если скажем требуется множество изменений вносить в код фреймворка Spring Security, не проще ли написать маломальски свой но заточенный и без неиспользуемого кода? Как поступаете вы форумчане? Используете Spring Security в своих проектах или нет? |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет.
Как по мне, то не правильный подход: под каждую задачу когда-то кто-то уже что-то написал. И это строго специфическая реализация конкретной задачи. Наша ж задача не изобретать снова велосипед. Важно найти такой велосипед и смочь посадить на него своего пассажира. Используем этот framework и еще как! Да, приходиться иногда что-то допиливать. но благодаря гибкости архитектуры Spring, все всегда можно как-то подконфигурить и с малыми затратами заставить его работать под наше приложение. Вот пример: у меня приложение развернуто в кластере. А заказали такую функциональность, как настройку длительности сессии, плюс принудительная возможность отключать администратором пользователей. Так что мы сделали: Взяли отнаследовали SessionRegistry, хранение идентификаторов сессий и атрибутов времени простоя вынесли в БД, что позволило из любого нода в кластере обращаться к одному хранилищу сессий. Ну и security-filter добавили, который проверял период простоя сессии на вариант ее отключения. Не в обиду сказано: но вряд ли вы настолько умнее, чем разработчики Spring. Они специально этим занимаются и решают именно эту задачу. Если у вас есть какие-то претензии или пожелания можно всегда им отписать в Community Благо люди отзывчивые. И там тоже был... -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
eugeneu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.3.2011 Репутация: нет Всего: нет |
Да я думаю вы правы!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |