Spring Security – авторизация БД с полномочиями по умолчанию?

В Spring security 3 - могу ли я декларативно определить полномочия по умолчанию, которые будут назначены всем аутентифицированным пользователям, которые аутентифицированы с помощью поставщика аутентификации jdbc? В настоящее время в моем веб-приложении нет концепции ролей (и не будет — вы либо являетесь пользователем, которому разрешен доступ к вашей учетной записи, либо нет), и я не хочу реализовывать авторитетную таблицу в своей базе данных, так как это было бы избыточно. В настоящее время с приведенным ниже объявлением я получаю следующее сообщение об ошибке.

сообщение [Таблица "авторитеты" не существует];

<authentication-manager>
        <authentication-provider>
            <password-encoder hash="plaintext"/>
            <jdbc-user-service data-source-ref="dataSource"
                               users-by-username-query="select account_uid,hashedpassword,true from account where account_uid=?" />

        </authentication-provider>
    </authentication-manager>

Если это невозможно сделать декларативно - каков будет лучший подход?

Заранее спасибо,

Ян.


person Mannie    schedule 03.02.2011    source источник


Ответы (2)


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

Если вы посмотрите на исходный код JdbcUserDetailsManager, вы увидите, что его гибкость весьма ограничена. Если вам не нужна таблица прав доступа пользователей, вместо этого вам потребуется таблица прав доступа группы. Один или другой.

Если вы хотите что-то более простое, похоже, вам придется написать собственную реализацию UserDetailsService. Если вы сделаете это и объявите его как обычный компонент Spring в контексте, вы можете подключить его к Spring Security, используя:

<authentication-manager>
    <authentication-provider user-service-ref="myUserService">
        <password-encoder hash="plaintext"/>
    </authentication-provider>
</authentication-manager>

Возможно, самым простым подходом будет копирование исходного кода для JdbcUserDetailsManager и удаление прав доступа/группы.

person skaffman    schedule 03.02.2011

Это можно сделать простым способом:

author-by-username-query="выберите account_uid, 'по умолчанию' из учетной записи, где account_uid=?"

Этот запрос повторно использует таблицу учетных записей и предоставляет каждому пользователю полномочия по умолчанию.

person Jethro Bakker    schedule 18.08.2011