проверка подлинности двух таблиц spring security

#java #spring #spring-security

#java #spring #spring-безопасность

Вопрос:

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

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

вот что у меня в настоящее время есть в 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:

Если я правильно понимаю, учетные записи потребителей хранятся в 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 , раздел: Получение информации о текущем пользователе).