Spring Security用户使用id_user进行用户名查询

Res*_*eff 3 authentication spring spring-mvc spring-security spring-boot

我想使用spring security但我以前从未使用它.我想从我的表(用户,角色和user_roles)中检索用户和角色.我已经调查过用户名,用户名查询.在所有示例中与以下示例相同.

<authentication-manager>
  <authentication-provider>
    <jdbc-user-service data-source-ref="dataSource"
      users-by-username-query=
        "select username,password, enabled from users where username=?"
      authorities-by-username-query=
        "select username, role from user_roles where username =?  " />
  </authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)

但我想使用 id_userid_role而不是 用户名角色.可能吗 ?我必须更改登录页面字段名称吗?提前致谢

jlu*_*etu 10

这是一种常见的情况.

首先,正如我在评论中建议的那样,使用别名重命名代表用户名,密码和用户启用或不启用的字段.像这样:

users-by-username-query=
  "select user.user_login as username, user.user_pwd as password, user.user_enabled as enabled 
  from user where user.user_login=?"
Run Code Online (Sandbox Code Playgroud)

然后,通常也有authorities一个不同的表与某个表有关user.这是一个常见的情况:

在此输入图像描述

用户与关系中的角色n-to-n相关的位置.

在这种情况下,authorities-by-username-query应该是这样的

 authorities-by-username-query=
        "SELECT users.name as username, roles.role as role 
        FROM users 
        INNER JOIN user_role ON users.id_user = user_role.id_user 
        INNER JOIN roles ON user_role.id_role = roles.id_role
        WHERE users.name = ?  "
Run Code Online (Sandbox Code Playgroud)

作为测试,对于包含此数据的一组表:

用户:

用户表内容

角色:

角色表内容

USER_ROLE

用户角色表内容

对于收到的用户名jlumietu,结果应为:

authority-by-username-query结果

最后,我有一些案例,我已经扩展了org.springframework.security.authentication.dao.DaoAuthenticationProvider,但我认为这是进行这种处理的最简单方法