весенняя безопасность два стола аутентификация - PullRequest
2 голосов
/ 12 ноября 2011

Надеюсь, это легко исправить,

что я хотел бы добиться - это использовать один логин для пользователей и администраторов

вот что у меня есть в файле applicationContext-security.xml:

<authentication-manager alias="authenticationManager">
    <!-- DAO Based Security -->
    <authentication-provider>
        <password-encoder hash="sha-256" />
        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="SELECT A.user_name AS username, A.consumer_password AS password, A.enabled AS enabled FROM consumer A where A.user_name=?"
            authorities-by-username-query="SELECT A.username as username, A.password as password, R.name as authority FROM admin A, roles R WHERE A.roles=R.id AND A.username=?"/>
    </authentication-provider>
</authentication-manager>

логин работает нормально для любого потребителя, но я не могу войти ни с одной из учетных записей администратора

sql возврат для учетной записи администратора:

+----------+------------------------------------------------------------------+-----------+
| username | password                                                         | authority |
+----------+------------------------------------------------------------------+-----------+
| admin    | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 | ADMIN     |
+----------+------------------------------------------------------------------+-----------+

sql возврат для потребительского счета:

+----------+------------------------------------------------------------------+---------+
| username | password                                                         | enabled |
+----------+------------------------------------------------------------------+---------+
| adam     | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 |        |
+----------+------------------------------------------------------------------+---------+

1 Ответ

2 голосов
/ 12 ноября 2011

Если я правильно понимаю, учетные записи потребителей хранятся в таблице consumer, а администраторы - в таблице admin.Почему вы ожидаете, что администраторы смогут войти в систему, если в users-by-username-query вы запрашиваете только consumers таблицу, а не admin таблицу?

Я думаю, что самый простой способ сделать это - сохранить как клиентов, так иадмины в одной таблице (скажем user).Затем вы можете запросить эту таблицу в users-by-username-query, чтобы проверить, существует ли пользователь для этого логина (неважно, клиент или администратор), а затем проверить, является ли пользователь клиентом или администратором, запросив таблицу roles в authorities-by-username-query.

Допустим, таблица roles может выглядеть примерно так:

+----------+------------------------------------------------------------------+
| username | role                                                        
+----------+------------------------------------------------------------------+
| adam     | customer  
+----------+------------------------------------------------------------------+
| admin    | admin
+----------+------------------------------------------------------------------+

Чем вы можете в любое время обратиться в Spring Security, если зарегистрированный пользователь является клиентом или администратором (см. http://static.springsource.org/spring-security/site/docs/3.1.x/reference/technical-overview.html#core-components,раздел: Получение информации о текущем пользователе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...