春季安全用户通过用户名查询与id_user
问题描述:
我想使用弹簧安全,但我从来没有在它之前使用过。我想从我的表(用户,角色和user_roles)检索用户和角色。我有调查了大约用户 - 用户名 - 查询。在所有示例中都与以下示例相同。春季安全用户通过用户名查询与id_user
<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 = ? "
作为测试,一组包含此数据表:
用户:
角色:
USER_ROLE
用于接收用户名jlumietu的结果应该是这样的:
最后,我有一些情况下,我已经延长org.springframework.security.authentication.dao.DaoAuthenticationProvider但我认为这是做这种处理的最简单的方法
这里是一个关于它的很好的讨论https://stackoverflow.com/questions/9069019/user-by-username-query-needing-more-than-1-parameter –
为什么你不检索您的领域'id_user'和'id_role',并在相同的查询中只是一个别名?这可能是实现这一目标的最简单方法。从来就做了好几次:'用户按用户名查询=“\t选择user.user_login作为用户名,user.user_pwd作为密码,user.user_enabled从用户启用其中user.user_login =?”' – jlumietu
确定,如果它可以像你说的那样使用,我会尝试一下。谢谢你的回复。 –