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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring Security, храниние в БД "перехватываемых урл" 
:(
    Опции темы
Eric_Cartman
Дата 8.9.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно ли каким-то образом специфицировать (хранить, обрабатывать) "перехватываемые URL" не в *.xml файлах, к примеру
Код

<http use-expressions="true">
    ...
    <intercept-url pattern="/secure/extreme/**" access="hasRole('ROLE_SUPERVISOR')"/>
    ...
</http>


а в БД?

Еще может кто посоветует откуда начинать копать про spring security и role-based access control?
PM MAIL   Вверх
MisterCleric
Дата 8.9.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Еще может кто посоветует откуда начинать копать про spring security и role-based access control? 

Я учился по референсу, который идет с дистрибутивом. Почитал, в проект прикрутил, уже два месяца как заказчик работает в приложении - не жалуется.

по поводу хранения в БД, что именно надо хранить?

ЗЫ: а что за use-expressions ?


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


Новичок



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

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



Цитата(MisterCleric @ 8.9.2009,  14:09)
по поводу хранения в БД, что именно надо хранить?

ЗЫ: а что за use-expressions ?

В БД хранить связку "паттерн URL, кот. перехватывается фильтром spring security" - "authority в терминах того же SS", не просто хранить а сделать так, чтобы SS эти связки подцеплял из БД а не из xml. Это вообще реально?

use-expressions - без понятия =) Скопипастил из мануала просто кусок xml.


Добавлено @ 14:20

Еще может кто посоветует откуда начинать копать про spring security и role-based access control?
Этот вопрос я неправильно немного задал, он скорее звучт так:
как при помощи SS реализовать концепцию "role-based access control"?

Это сообщение отредактировал(а) Eric_Cartman - 8.9.2009, 14:21
PM MAIL   Вверх
MisterCleric
Дата 8.9.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



дык это ж и решается через:
Код

<intercept-url pattern="\A/secure/.*\" access="ROLE_SUPERVISOR,ROLE_TELLER"/>
<intercept-url pattern="/theme/**" filters="none"/>
<intercept-url pattern="\A/secure/super/.*\Z" access="ROLE_WE_DONT_HAVE"/>


Вообще, ты можешь создавать бины не в xml, а ручками из java-кода.
Вот вопрос: зачем так заморачиватся? Ведь суть контейнера как раз в том, что сначала подымается он, а потом уже через него конфигурится поведение приложения


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


Новичок



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

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



Цитата(MisterCleric @ 8.9.2009,  14:57)
дык это ж и решается через:
Код

<intercept-url pattern="\A/secure/.*\" access="ROLE_SUPERVISOR,ROLE_TELLER"/>
<intercept-url pattern="/theme/**" filters="none"/>
<intercept-url pattern="\A/secure/super/.*\Z" access="ROLE_WE_DONT_HAVE"/>


Вообще, ты можешь создавать бины не в xml, а ручками из java-кода.
Вот вопрос: зачем так заморачиватся? Ведь суть контейнера как раз в том, что сначала подымается он, а потом уже через него конфигурится поведение приложения

Да, я в курсе, что это так и решается.

Вопрос был как раз в том, можно ли это решить не через xml, а через базу. Зачем это нужно: для динамического (почти динамического) изменения пермишенов на УРЛы.

К примеру, у меня была такая связка
Код

<intercept-url pattern="\A/secure/super/.*\Z" access="ROLE_WE_DONT_HAVE"/>

Я хочу к этому же паттерну добавить еще одну роль, скажем ROLE_SATANA, мои действи: я правлю xml следующим образом
Код

<intercept-url pattern="\A/secure/super/.*\Z" access="ROLE_WE_DONT_HAVE, ROLE_SATANA"/>

и передеплоиваю приложение. Все правильно расписал?

Так вот, вопрос в том, есть ли возможность делать подобные вещи не передеплоивая приложения? (я предположил что есть возможность делать это через базу, только вопрос "как")
PM MAIL   Вверх
ker_tt
Дата 8.9.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, вопрос интересный. 
Сам недавно копал на эту тему - в теории все более-менее понятно, но писать самому нет времени, а в виде готовых примеров к сожалению ничего не нашел.
Так что если кто-то кинет готовый пример - будет просто замечательно.
PM MAIL   Вверх
MisterCleric
Дата 8.9.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ребята, я такие вещи решал на уровне прав.
Есть такой паттерн:
Код

<intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED"/>


Потом есть в базе столько угодно ролей, которые могут динамически создаваться и удаляться. И, соответственно, им назначаются определенные права. А вот можно ли пользователю заходить на тот или иной ресурс уже проверяется или на уровне
Код

<security:authorize ifAllGranted="...">


Или проверкой присутствия соответствующего права у данной роли:
Код

  <rich:column id="deleteColumn" rendered="#{rolesManager.rightIdsByPrincipal['18'] != null}">


Я ж так понимаю, если добавляются какие-то новые ресурсы в закрытом для определенной роли контексте, то все-равно приложение передеплоивается...



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


Эксперт
***


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

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



Доброе утро. Еще дочитал такое:
Цитата

access-decision-manager-ref
Optional attribute specifying the ID of the AccessDecisionManager implementation which should be used for authorizing HTTP requests. By default an AffirmativeBased implementation is used for with a RoleVoter and an AuthenticatedVoter.


Надо поковырять в сторону кастомизации ADM, что бы он проверял реквест паттерн на то, что у тебя есть в базе



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


Эксперт
***


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

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



Так, и читаем еще здесь:
Srping-Security FAQ


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


Эксперт
***


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

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



Ну, в общем, ребята, меня это тоже зацепило. Решил побороть такую задачу.
Делаем где-то  так:
Код

 <http access-decision-manager-ref="dbAccessDecisionManager">
        <intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED"/>
    </http>

    <beans:bean id="roleVoter" class="org.springframework.security.vote.RoleVoter"/>
    <beans:bean id="dbRoleUrlVoter" class="DbRoleUrlVoter"/>
    
    <beans:bean id="dbAccessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
    <beans:property name="decisionVoters">
      <beans:list>
        <beans:ref local="roleVoter"/>
        <beans:ref local="dbRoleUrlVoter"/>
      </beans:list>
    </beans:property>
  </beans:bean>


Где DbRoleUrlVoter имеет метод:
Код

public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config)
  {
    if ((object == null) || !this.supports(object.getClass()))
    {
      throw new IllegalArgumentException("Does not support the presented Object type");
    }
    
    GrantedAuthority[] authorities = authentication.getAuthorities();
 
    FilterInvocation invocation = (FilterInvocation) object;
    HttpServletRequest request = invocation.getHttpRequest();
    
}


1. При инициализации данный бин достает роли и паттерны урлов из базы.
2. Ловит событие смены ролей-паттернов, что бы перегрузить свой локальный кеш.
3. Из request можно достать УРЛ и наложить его на имеющийся паттерн.
4. authorities содержит роли текущего юзера.

Не проверял, конечно, но мне кажется логично.


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0812 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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