Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Sping Security разрешения(не роли). 
:(
    Опции темы
eugeneu
Дата 25.3.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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_") - аналогично сделать для пермишенов,
то есть давать доступ например на элемент управления на странице не по РОЛИ а именно по ПЕРМИШЕНУ иначе опять же придется менять код приложения...


Заранее спасибо, буду рад вашим ответам.
PM MAIL   Вверх
MisterCleric
Дата 28.3.2011, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет. Возможно в данном случае тебе поможет использовать вместо обычных выражений access expressions:
Код

  <http use-expressions="true">
            <intercept-url pattern="/page1.html" access="hasRole('PERM_PAGE1')" />
  </http>

И тебе надо будет еще отнаследовать и проконфигурить пару классов:
org.springframework.security.web.access.expression.WebSecurityExpressionRoot 
переписать его метод :
Код

  public final boolean hasRole(String role) {
        return getAuthoritySet().contains(role);
    }

На проверку твоих пермишенов. Или попробуй в твоем наследнике написать новый метод, который ты и будешь использовать в 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


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
eugeneu
Дата 29.3.2011, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.3.2011

Репутация: нет
Всего: нет



Огромное спасибо, MisterCleric. Буду копать...
Я уже подумывал свой spring security писать...
PM MAIL   Вверх
eugeneu
Дата 29.3.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.3.2011

Репутация: нет
Всего: нет



Еще хотел спросить у вас форумчане. 
Если скажем требуется множество изменений вносить в код фреймворка Spring Security, не проще ли написать маломальски свой но заточенный и без неиспользуемого кода?
Как поступаете вы форумчане? Используете Spring Security в своих проектах или нет?
PM MAIL   Вверх
MisterCleric
Дата 29.3.2011, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
Как по мне, то не правильный подход: под каждую задачу когда-то кто-то уже что-то написал. И это строго специфическая реализация конкретной задачи. Наша ж задача не изобретать снова велосипед. Важно найти такой велосипед и смочь посадить на него своего пассажира.
Используем этот framework и еще как!
Да, приходиться иногда что-то допиливать. но благодаря гибкости архитектуры Spring, все всегда можно как-то подконфигурить и с малыми затратами заставить его работать под наше приложение.
Вот пример: у меня приложение развернуто в кластере. А заказали такую функциональность, как настройку длительности сессии, плюс принудительная возможность отключать администратором пользователей.
Так что мы сделали:
Взяли отнаследовали SessionRegistry, хранение идентификаторов сессий и атрибутов времени простоя вынесли в БД, что позволило из любого нода в кластере обращаться к одному хранилищу сессий. 
Ну и security-filter добавили, который проверял период простоя сессии на вариант ее отключения.

Не в обиду сказано: но вряд ли вы настолько умнее, чем разработчики Spring. Они специально этим занимаются и решают именно эту задачу.
Если у вас есть какие-то претензии или пожелания можно всегда им отписать в 
Community
Благо люди отзывчивые. 

И там тоже был...



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
eugeneu
Дата 29.3.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.3.2011

Репутация: нет
Всего: нет



Да я думаю вы правы!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.