Sql 针对两个用户服务使用Spring security对用户进行身份验证

Sql 针对两个用户服务使用Spring security对用户进行身份验证,sql,authentication,spring-security,Sql,Authentication,Spring Security,我对Spring security非常陌生,我的问题如下: 我有一个membermysql表,其中包含有关网站成员的信息,包括他们的用户名、密码和角色。到目前为止还不错:我可以使用这个表来配置冲突 多个存储库的问题是,您需要确保区分哪个用户是哪个用户。例如,假设您的数据如下所示 成员表 username ---------------------- member username ---------------------- moderator username value

我对Spring security非常陌生,我的问题如下:

我有一个membermysql表,其中包含有关网站成员的信息,包括他们的用户名、密码和角色。到目前为止还不错:我可以使用这个表来配置
冲突
多个存储库的问题是,您需要确保区分哪个用户是哪个用户。例如,假设您的数据如下所示

成员表

username
----------------------
member
username
----------------------
moderator
username          value
----------------------------------------
moderator         secret
username
----------------------
member
moderator
username           is_moderator
----------------------
member             false
moderator          true
主持人表

username
----------------------
member
username
----------------------
moderator
username          value
----------------------------------------
moderator         secret
username
----------------------
member
moderator
username           is_moderator
----------------------
member             false
moderator          true
然后您就有了一些与您的用户相关联的数据

数据表

username
----------------------
member
username
----------------------
moderator
username          value
----------------------------------------
moderator         secret
username
----------------------
member
moderator
username           is_moderator
----------------------
member             false
moderator          true
如果发生碰撞,现在会发生什么?例如,用户注册后,您的成员表如下所示:

成员表

username
----------------------
member
username
----------------------
moderator
username          value
----------------------------------------
moderator         secret
username
----------------------
member
moderator
username           is_moderator
----------------------
member             false
moderator          true
哪个版主拥有这些数据?无法区分这两个用户

替代方法 另一种方法是使用用户到角色的映射。这将是使用类似以下内容:

成员表

username
----------------------
member
username
----------------------
moderator
username          value
----------------------------------------
moderator         secret
username
----------------------
member
moderator
username           is_moderator
----------------------
member             false
moderator          true
然后,当用户尝试使用现有用户名注册时,存在违反约束的情况,因此不需要区分这两种情况。当然,您可以使用另一个表映射角色。这是SpringSecurity通常使用表所做的

使用多个UserDetailsService 如果确实希望以任何方式使用多个用户存储库,只需在配置中声明多个UserDetailsService条目即可。内存中配置示例如下所示:


  <authentication-manager>
    <authentication-provider>
      <jdbc-user-service .. />
    </authentication-provider>
    <authentication-provider>
      <user-service>
        <user username="moderator" 
            password="password"
            authorities="ROLE_MODERATOR"/>
      </user-service>
    </authentication-provider>
  </authentication-manager>

例如查询