【问题标题】:spring security two table authSpring Security 两表身份验证
【发布时间】:2011-11-12 18:00:03
【问题描述】:

我希望这个很容易修复,

我想要实现的是为消费者和管理员使用一个登录名

这是我目前在 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 |        |
+----------+------------------------------------------------------------------+---------+

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    如果我理解正确,消费者帐户存储在consumer 表中,管理员存储在admin 表中。如果在users-by-username-query 中您只查询consumers 表而不是admin 表,为什么您期望管理员能够登录?

    我认为实现它的最简单方法是将客户和管理员存储在一个表中(比如说user)。然后您可以在users-by-username-query 中查询该表以检查该登录的用户是否存在(无论是客户还是管理员),然后通过查询roles 中的roles 表来检查用户是客户还是管理员@。

    假设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 ,部分:获取有关当前用户的信息)。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2014-02-26
      • 2013-01-15
      • 2019-08-25
      • 2013-10-30
      • 2014-04-07
      • 2012-02-18
      • 2019-04-08
      • 2016-09-01
      相关资源
      最近更新 更多