Spring Security让我适应,我无法解决身份验证错误。这是我的配置:
<beans:bean id='bCryptPasswordEncoder' class='org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder'/>
<authentication-manager>
<authentication-provider>
<password-encoder ref="bCryptPasswordEncoder" />
<jdbc-user-service
data-source-ref="dataSource"
users-by-username-query="select emplid as USERNAME ,password as PASSWORD,'true' AS ENABLED from app_user where emplid=?"
authorities-by-username-query="select u.emplid, p.name from app_user u inner join app_user_app_permissions auap ON auap.app_users = u.id inner join app_permission p on p.id = auap.app_permissions where u.emplid =?" />
</authentication-provider>
</authentication-manager>
我使用以下方法创建编码密码:
String password = "p4ssword";
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode(password);
我已经验证了数据库中存在正确的用户/密码,并且获取它们的查询会运行。
任何想法为什么这不起作用,它让我疯了
答案 0 :(得分:0)
如果user-by-username-query工作正常,那么首先要检查的是第二个查询。分配给用户的一个返回角色/权限。要使登录尝试成功,用户必须至少有一个由authority-by-username-query返回的角色。
要测试它,您可以使用如下查询:&#34;选择u.emplid,&#39; USER&#39;来自app_user u WHERE u.emplid =?&#34;。
如果它仍然无法正常工作,那么您最好的选择是将日志记录级别设置为DEBUG并查看Spring正在逐步完成的工作。
答案 1 :(得分:0)
您在secoand查询中遇到问题,这意味着按用户权限查询应该仅是用户名和角色,而不是电子邮件,姓名等。
`<bean id="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="ds"
users-by-username-query="select user_name,user_password,enabled,user_email from user where user_name=?"
authorities-by-username-query="select user_name,user_role from user_role where user_name=?"
/>
<s
<security:password-encoder hash="bcrypt" ref="bcryptEncoder"/>
</security:authentication-provider>
</security:authentication-manager>`