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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти реальный пример в интернете, найти Java Role Based Access 
:(
    Опции темы
fidel
Дата 4.9.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите найти реальный пример в интернете: надо найти веб-приложение(jsp+servlet), которое бы при логине юзеров, в зависимости от их прав, разрешала производить разные действия, вся информация о юзерах должна храниться в БД, короче надо найти пример Java Role Based Access
PM MAIL   Вверх
sergakrem
Дата 5.9.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.7.2006
Где: Украина, г. Киев

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



Доброе время суток.

А такой вопрос наводящий -  Вы собираетесь права разграничивать для объектов или системных action'ов?
Просто сам по себе "Java Role Based Access" - весьма размытое понятие. Хотя ответ на этот вопрос достаточно важен, т.к. от него зависит архитектура системы безопасности.

Просто могу поделиться опытом сождания приложения с "Role Based Access" на базе Spring Framework и Acegi Security.
Там, при таком подходе все достаточно просто:

1. Создается файл "security.xml" в котором описываются роли и пользователи (добавляются они соответственно модифкацией XML-файла), а так же соответственно - что им можно смотреть (вызывать экшины, т.е. их маски)(вторая часть файла). (Он включается в WEB.XML для дальнейшей обработки Spring)

Код

<bean id="xmlUsersDao" class="com.company.app.security.users.XmlUsersDao">
        <property name="rootKey">
            <value>app.root</value>
        </property>
        <property name="fileName">
            <value>/WEB-INF/data/security.xml</value>
        </property>
....
            <bean class="com.company.app.security.users.SecurityData">
                <property name="roleDefault" value="ROLE_DEFAULT"/>
                <property name="roles">
                    <map>
                        <entry key="ROLE_DATA" value="Report"/>
                        <entry key="ROLE_ADMIN" value="Admin"/>
                    </map>
                </property>
                <property name="groups">
                    <map>
                        <entry key="admins">
                            <bean class="com.company.app.security.GroupData">
                                <property name="name" value="Administrators"/>
                                <property name="id" value="admins"/>
                                <property name="roles">
                                    <list>
                                        <value>ROLE_DATA</value>
                                        <value>ROLE_ADMIN</value>
                                    </list>
                                </property>
                            </bean>
                        </entry>
                        <entry key="users">
                            <bean class="com.company.app.security.GroupData">
                                <property name="name" value="Users"/>
                                <property name="id" value="users"/>
                                <property name="roles">
                                    <list>
                                        <value>ROLE_DATA</value>
                                    </list>
                                </property>
                            </bean>
                        </entry>
...
</bean>

.....


<bean id="filterInvocationInterceptor" class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"/>
        <property name="objectDefinitionSource">
            <value>
      CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
      PATTERN_TYPE_APACHE_ANT

      /acegilogin.jsp*=ROLE_ANONYMOUS
      /forbidden.jsp*=ROLE_ANONYMOUS
      /page_not_found.jsp*=ROLE_ANONYMOUS

      /rep*=ROLE_DATA
      /rep/**=ROLE_DATA
    /datar*=ROLE_DATA

      /admin*=ROLE_ADMIN
      /admin/**=ROLE_ADMIN
            
      /index.jsp=ROLE_DEFAULT
      /index.app=ROLE_DEFAULT
      /logout.app=ROLE_DEFAULT
      
      /**=ROLE_FORBIDDEN
      
    </value>
        </property>
    </bean>




2. В WEB.XML добавляется слушатель и маппинг:

Код

<filter>
    <filter-name>Acegi HTTP Request Security Filter</filter-name>
    <filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class>
    <init-param>
        <param-name>targetClass</param-name>
        <param-value>net.sf.acegisecurity.util.FilterChainProxy</param-value>
    </init-param>
</filter>


<filter-mapping>
    <filter-name>Acegi HTTP Request Security Filter</filter-name>
    <url-pattern>*.pattern</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Acegi HTTP Request Security Filter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Acegi HTTP Request Security Filter</filter-name>
    <url-pattern>/j_acegi_check</url-pattern>
</filter-mapping>

.....

<listener>
    <listener-class>net.sf.acegisecurity.ui.session.HttpSessionEventPublisher</listener-class>
</listener>

.......


<servlet>
    <servlet-name>pattern</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>


....

<servlet-mapping>
    <servlet-name>pattern</servlet-name>
    <url-pattern>*.pattern</url-pattern>
</servlet-mapping>

...



(Вобщем-то это все очень подробно описано в примерах)


3. Ну и собственно подключается сама библиотека ACEGI.

А дальше при обращении к каким-то путям, попадающим под паттерны она их сравнивает с 

      /acegilogin.jsp*=ROLE_ANONYMOUS
      /forbidden.jsp*=ROLE_ANONYMOUS
      /page_not_found.jsp*=ROLE_ANONYMOUS

      /report*=ROLE_DATA
      /report/**=ROLE_DATA
    /dataextr*=ROLE_DATA

      /admin*=ROLE_ADMIN
      /admin/**=ROLE_ADMIN
            
      /index.jsp=ROLE_DEFAULT
      /index.app=ROLE_DEFAULT
      /logout.app=ROLE_DEFAULT


и соответственно пускает - или не пускает.


Ну а на логин странице нужно просто сообщить ACEGI - кто пришел.


Единственное что - я так понимаю, что бы заставить ее работать на уровне объектов - нужно очень хорошо обработать напильником.  smile 


Дополнительные ссылки:
Acegi Security Framework:      
http://www.acegisecurity.org/
Обсуждение темы:
1. http://www.codecomments.com/archive253-2005-4-153855.html
2. http://portal.acm.org/citation.cfm?id=286904


Это сообщение отредактировал(а) sergakrem - 5.9.2006, 00:32
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.0595 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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