Главная » Spring » Аутентификация с использованием базы данных Spring

0

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

Элемент <jdbc-user-service>  используется так же, как и элемент

<user-service>, включая его внедрение в атрибут user-service эле- мента <authentication-provider>  или встраивание внутрь элемента

<authentication-provider>.  Ниже  демонстрируется  пример  настройки

<jdbc-user-service>, где определяется значение атрибута id, благодаря чему элемент может быть объявлен отдельно и затем внедрен в эле- мент    <authentication-provider>:

<jdbc-user-service   id="userService" data-source-ref="dataSource"  />

Для извлечения информации о пользователях из базы данных элемент <jdbc-user-service> использует источник данных JDBC, внед- ренный посредством атрибута data-source. Без дополнительных на- строек служба учета пользователей будет извлекать информацию, используя следующий SQL-запрос:

select username,password,enabled from users

where  username  =  ?

И хотя сейчас мы ведем речь об аутентификации пользователя, определение привилегий пользователя тоже можно отнести к про- цедуре аутентификации. По умолчанию элемент <jdbc-user-service> будет использовать следующий SQL-запрос для определения при- вилегий пользователя с указанным именем:

select   username,authority from   authorities where username = ?

Все это хорошо, если так случилось, что информация о пользо- вателях в базе данных приложения хранится в таблицах, соответ- ствующих этим запросам. Но готов поспорить, что в большинстве приложений это не так. Если говорить о приложении Spitter, инфор- мация о пользователях хранится в таблице spitter. Очевидно, что настройки по умолчанию не подходят для данного случая.

Таблица 10.5. Атрибуты элемента <jdbc-user-service>, изменяющие SQL-запрос, который используется для извлечения информации о пользователе

Атрибут

Описание

users-by-username-query

Запрос имени пользователя, пароля и признака «разрешен/запрещен»

authorities-by-username-query

Запрос привилегий для указанного пользователя

group-authorities-by-username-query

Запрос группы привилегий для указанного пользователя

К счастью, элемент <jdbc-user-service> легко настроить на исполь- зование любых других запросов, лучше подходящих под нужды при- ложения. В табл. 10.5 перечислены атрибуты элемента <jdbc-user- service>, которые можно использовать для настройки его поведения.

Для приложения Spitter следует определить атрибуты users-by- username-query  и authorities-by-username-query, как показано ниже:

<jdbc-user-service   id="userService" data-source-ref="dataSource" users-by-username-query=

"select username, password, true from spitter where username=?" authorities-by-username-query=

"select username,’ROLE_SPITTER’ from spitter where username=?" />

В приложении Spitter имена пользователей и пароли хранятся в таблице spitter, в полях username и password соответственно. Но мы не рассматривали идею возможности активации или деактива- ции учетных записей пользователей, предполагая, что все учетные записи активны. Поэтому SQL-запрос написан так, что в качестве

признака «разрешен/запрещен» он всегда возвращает true для всех пользователей.

Мы также не позаботились о распределении пользователей при- ложения Spitter по разным уровням привилегий. Все пользователи обладают одинаковыми привилегиями. В действительности в ба- зе данных приложения Spitter отсутствует таблица, где хранится информация о привилегиях пользователей. Поэтому в атрибуте authorities-by-username-query указан запрос, возвращающий привиле- гию ROLE_SPITTER для любых пользователей.

Реляционные базы данных часто используются для хранения ин- формации о пользователях, но не менее (если не более) часто для аутентификации применяется сервер каталогов LDAP. Поэтому по- смотрим, как настроить Spring Security на использование LDAP в качестве хранилища информации о пользователях.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии