В предыдущей заметке по Spring Security (SS) я рассмотрел пример использования SS. Пример был примитивный, ориентированный исключительно на знакомство с SS.
Теперь более подробно рассмотрим вопрос хранения данных о пользователях. В первом примере эти данные были забиты раз и навсегда в xml файл и как либо оперировать ними было невероятно трудно. Более привычный способ хранения пользователей - это база данных.
В SS реализован UserDetailsService, который позволяет получать информацию о пользователях посредством jdbc подключения к базе данных, для этого достаточно в конфигурации зарегистировать бин:
<bean id="userDetailsService" class="org.springframework.security.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
Где в качестве dataSource используется бин настроек подключения к бд, например:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
При это в базе данных должна существовать следующая схема: таблицы users и authorities, а также внешний ключ.
CREATE TABLE users (
username VARCHAR(50) NOT NULL PRIMARY KEY,
password VARCHAR(50) NOT NULL,
enabled BIT NOT NULL
);
CREATE TABLE authorities (
username VARCHAR(50) NOT NULL,
authority VARCHAR(50) NOT NULL
);
ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users(username);
В общем случае этот вариант вполен пригоден для использования, но что делать если вы используете какой то высокоуровневый фрэймворк, или если у вас уже есть свои таблицы для хранения пользователей... тогда читайте следующую заметку
Теперь более подробно рассмотрим вопрос хранения данных о пользователях. В первом примере эти данные были забиты раз и навсегда в xml файл и как либо оперировать ними было невероятно трудно. Более привычный способ хранения пользователей - это база данных.
В SS реализован UserDetailsService, который позволяет получать информацию о пользователях посредством jdbc подключения к базе данных, для этого достаточно в конфигурации зарегистировать бин:
<property name="dataSource" ref="dataSource"/>
</bean>
Где в качестве dataSource используется бин настроек подключения к бд, например:
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
При это в базе данных должна существовать следующая схема: таблицы users и authorities, а также внешний ключ.
CREATE TABLE users (
username VARCHAR(50) NOT NULL PRIMARY KEY,
password VARCHAR(50) NOT NULL,
enabled BIT NOT NULL
);
CREATE TABLE authorities (
username VARCHAR(50) NOT NULL,
authority VARCHAR(50) NOT NULL
);
ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users(username);
В общем случае этот вариант вполен пригоден для использования, но что делать если вы используете какой то высокоуровневый фрэймворк, или если у вас уже есть свои таблицы для хранения пользователей... тогда читайте следующую заметку
6 комментариев:
убери пожалуйста фоновую музыку - читать невозможно
thx
А если надо логиниться по имейлу, то как это можно реализовать? Спасибо.
Sergey,
тебе надо реализовать свою имплементацию UserDetailsService.
Вот пример http://forum.springsource.org/showthread.php?53814-Custom-implementation-of-Spring-Security-s-UserDetailsService-with-Jpa-Hibernate
Отправить комментарий