Spring Security - авторизация БД с полномочиями по умолчанию? - PullRequest
1 голос
/ 04 февраля 2011

В 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>

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

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

Ян.

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

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

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

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

2 голосов
/ 04 февраля 2011

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

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

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

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

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

...