带有 id_user 的 Spring Security 用户按用户名查询

itcoder 阅读:60 2024-05-10 16:29:43 评论:0

我想使用 spring security,但我以前从未使用过它。我想从我的表(用户、角色和 user_roles)中检索用户和角色。我调查了 users-by-username-query 。在所有示例中都与以下示例相同。

<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> 

但我想使用 id_user id_role 而不是 用户名 角色 。是否可以 ?我必须更改登录页面字段名称吗?
提前致谢

请您参考如下方法:

这是一种常见的情况。

首先,正如我在评论中所建议的,使用别名来重命名代表用户名、密码以及用户是否启用的字段。像这样:

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=?" 

然后,通常也将 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 = ?  " 

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

用户:



角色:



用户角色



对于收到的用户名 jlumietu,结果应该是这样的:



最后,我有一些扩展 org.springframework.security.authentication.dao.DaoAuthenticationProvider 的情况,但我认为这是进行此类处理的最简单方法


标签:Spring
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号