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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Acegi security, помогите настроить userDetailsService 
:(
    Опции темы
Zamuta
Дата 27.2.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет. Вопрос касательно настройки Acegi....

Проблема в настройке userDetailsService.
Если делаю так: 
Код

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
  <property name="userDetailsService">
   <bean class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
    <property name="userMap">
     <value>
      user1=test123,/permissions/permission1,/permissions/permission01
      user2=test123,/permissions/permission01
     </value>
    </property>
   </bean>
  </property>
 </bean>

То всё работает....

А если пытаюсь через БД, вот так:
Код

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
        <property name="userDetailsService" ref="userDetailsService"/>
        <property name="userCache">
            <bean class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
                <property name="cache">
                    <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
                        <property name="cacheManager">
                            <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
                        </property>
                        <property name="cacheName" value="userCache"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    
    <bean id="userDetailsService" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
    </bean>
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost:3306/registration</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>pass</value>
        </property>
    </bean>

 то не получается. Говорит Error listenerStart, он всегда так говорит если есть ошибка в файле настроек acegi, applicationContext.xml или у него что-то не получается.Т.е более подробного разъяснения ошибки мне от него добиться не удалось, поэтому спрашиваю у вас....  

З.Ы. Таблицы созданы как в  http://acegisecurity.org/dbinit.txt, драйвер бд в библиотеке лежит.



--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Zamuta
Дата 3.3.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В applicationContext.xml :
Код

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
    <property name="userDetailsService">
        <bean class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
             <property name="dataSource">
                <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                    <property name="jndiName" value="java:comp/env/jdbc/dataSource"/>
                </bean>               
            </property>
            <property name="usersByUsernameQuery">
                <value>SELECT username,password,enabled FROM users WHERE username = ?</value>
            </property>
            <property name="authoritiesByUsernameQuery">
                <value>SELECT username,authority FROM authorities WHERE username = ?</value>
            </property>
        </bean>
    </property>     
</bean>    



--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Zamuta
Дата 3.3.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



С базой данных теперь всё в порядке, но что делать со значениями 'enabled'  и 'authority' если все пользователи у меня имеют одинаковые роли и все активны? А не использовать эти параметры нельзя...

Неужели никто не работал с Acegi? Tux, вроде ты его хвалил.... 


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Adept
Дата 22.3.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Та же трабла, ктонить знает как сделать?
PM MAIL   Вверх
Zamuta
Дата 22.3.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Adept, да я потом разобрался. Сделал так, при регистрации нового пользователя в sql запросе добавляем в столбец 'enabled' - true , если захочешь можешь потом просто вписать туда 'false' и юзер станет отключенным. А в столбец 'authority' ту роль какая у тебя по умолчанию. А потом если вдруг появится новая группа юзеров просто будешь добавлять для них другую роль.

Код

stmt.execute("INSERT INTO reg (username, email, password, enabled) VALUES ('"+nickName+"', '"+mail+"', '"+pass+"', true);");
stmt.execute("INSERT INTO authorities (username, authority) VALUES ('"+nickName+"', 'ROLE_CUSTOMER');");



--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Adept
Дата 29.3.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Zamuta @ 22.3.2007,  18:09)
Adept, да я потом разобрался. Сделал так, при регистрации нового пользователя в sql запросе добавляем в столбец 'enabled' - true , если захочешь можешь потом просто вписать туда 'false' и юзер станет отключенным. А в столбец 'authority' ту роль какая у тебя по умолчанию. А потом если вдруг появится новая группа юзеров просто будешь добавлять для них другую роль.

Код

stmt.execute("INSERT INTO reg (username, email, password, enabled) VALUES ('"+nickName+"', '"+mail+"', '"+pass+"', true);");
stmt.execute("INSERT INTO authorities (username, authority) VALUES ('"+nickName+"', 'ROLE_CUSTOMER');");

Вот, опять руки дошли  smile 
Я нехочу добавлять в таблицу ненужные столбцы. У меня только одна роль supervisor.
Я хотелбы узнать, почему вот так неработает?
Код

<property name="usersByUsernameQuery">
         <value>SELECT login as username, pwd as password, 'true' as enabled FROM tbUsers WHERE login = ?</value>
</property>
<property name="authoritiesByUsernameQuery">
        <value>SELECT login as username, 'ROLE_SUPERVISOR' as authority FROM tbUsers WHERE login = ?</value>
</property>    

Столбцов enabled и authority в таблице нет, я поставил необходимые значения.
непроходит аутентификация (в бд введенные логин, пароль точно есть)
Код

[DEBUG] 14:04:08 ProviderManager - Authentication attempt using org.acegisecurity.providers.dao.DaoAuthenticationProvider
[ WARN] 14:04:08 LoggerListener - Authentication event AuthenticationFailureBadCredentialsEvent: www; details: org.acegisecurity.ui.WebAuthenticationDetails@fffe3f86: RemoteIpAddress: 127.0.0.1; SessionId: 5FFC8313C06A4A664BD66289C0596997; exception: Bad credentials
[DEBUG] 14:04:08 AuthenticationProcessingFilter - Updated SecurityContextHolder to contain null Authentication
[DEBUG] 14:04:08 AuthenticationProcessingFilter - Authentication request failed: org.acegisecurity.BadCredentialsException: Bad credentials

PM MAIL   Вверх
Zamuta
Дата 29.3.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Adept, посмотри внимательнее как это рекомендуют делать у них на сайте пример. Сам не проверял, но есть подозрение на то, что эти данные должны лежать в разных таблицах (у меня они лежат в разных). Т.к. это разные механизмы авторизация и аутентификация соответственно. 

А если у тебя только одна роль supervisor, то добавляй вместо 'ROLE_CUSTOMER' свой 'supervisor', но тогда защищённые ресурсы нужно соответственно переписать на другую роль.

Код

<bean id="filterSecurityInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
        <property name="authenticationManager"><ref bean="authenticationManager"/></property>
        <property name="accessDecisionManager">
            <bean class="org.acegisecurity.vote.AffirmativeBased">
                <property name="allowIfAllAbstainDecisions" value="false"/>
                <property name="decisionVoters">
                    <list>
                        <bean class="org.acegisecurity.vote.RoleVoter">
                            <property name="rolePrefix">
                                <value></value>
                            </property>
                        </bean>
                        <bean class="org.acegisecurity.vote.AuthenticatedVoter" />
                    </list>
                </property>
            </bean>
        </property>
        <property name="objectDefinitionSource">
            <value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT
                /private_page.jsp=supervisor
                /login.jsp=ROLE_ANONYMOUS
            </value>
        </property>
    </bean>     


Это сообщение отредактировал(а) Zamuta - 29.3.2007, 14:40


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

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

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


 




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


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

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