Использование базы данных mysql для аутентификации пользователей в безопасности Spring? - PullRequest
6 голосов
/ 24 августа 2011

Я хочу использовать Spring Security для аутентификации пользователей в моем веб-приложении. Так как я не зрелый пользователь Spring Framework, я не могу получить четкое представление о том, как мы можем сделать настройки конфигурации для использования jdbc-user-service. я сделал следующие конфигурации. но он не работает

<authentication-manager>
    <authentication-provider>
         <jdbc-user-service data-source-ref="myDataSource"/>
    </authentication-provider>        
</authentication-manager>
<beans:bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <beans:property name="url" value="jdbc:mysql://localhost:3306/testDB"/>
    <beans:property name="username" value="admin"/>
    <beans:property name="password" value="admin"/>
</beans:bean>

.. Может кто-нибудь, пожалуйста, помогите мне решить проблему с примером файла конфигурации. Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 24 августа 2011

Еще один способ сделать это - создать таблицы, используя стандартную схему базы данных Spring (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html).). Тогда вы можете просто использовать jdbc-userservice Spring:

<security:authentication-provider >
    <security:jdbc-user-service data-source-ref="dataSource" /> 
    <security:password-encoder hash="sha" />
</security:authentication-provider>

используя собственную схему, вы можете переопределить запросы следующим образом:

<security:authentication-provider>
    <securiy:jdbc-user-service 
      data-source-ref="dataSource"
      users-by-username-query="select username, password from users where username=?"
      authorities-by-username-query="select username, roleName from role..."
      role-prefix="ROLE_"
    />
 </security:authentication-provider>
6 голосов
/ 24 августа 2011

Обычно вы делаете это с пользовательским UserDetailsService. UserDetailsService - это DAO, используемый для загрузки данных о пользователе при попытке входа в систему. Взгляните на метод loadUserByUsername(String username) и класс UserDetails весной.

Вам нужно определить это в вашем контексте:

<bean id="myDetailsService"
    class="com.company.service.impl.MyDetailsService" />

Чтобы использовать его, вы можете добавить его в конфигурацию безопасности:

<authentication-manager>
    <authentication-provider user-service-ref="myDetailsService" />
</authentication-manager>

и все ваши фильтры безопасности будут использовать его.

Вы можете задать более конкретный вопрос, если вам нужна помощь в его реализации, но у вас не возникнет проблем с ИМО.

1 голос
/ 08 июня 2012

Добавьте эти строки в ваш тег <authentication-provider>:

<authentication-provider>
    <password-encoder hash="sha-256" />
    <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="
                SELECT username, password, enabled
                FROM user WHERE username = ?"

            authorities-by-username-query="
                SELECT u.username, r.role_name
                FROM user u, user_role r, assigned_role a
                WHERE u.id = a.username
                AND r.id = a.role_id
                AND u.username = ?"
        />
</authentication-provider>

Конечно, вам придется настроить запросы в соответствии с именами таблиц.

...