我正在开发一个使用Spring Security 4.0.2对用户进行身份验证的Web应用程序。用户名/密码。
当我尝试使用现有用户名登录时,Spring安全性会告诉我"用户帐户已停用",但我不知道如何更改此信息。
我的背景:
<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/private/**" access="hasRole('ROLE_USER')" />
<!-- Erro aqui -->
<form-login login-page="/public/login.xhtml"
username-parameter="j_username" password-parameter="j_password"
login-processing-url="/j_spring_security_check"
authentication-failure-url="/public/login.xhtml?login_error=1"
authentication-success-handler-ref="authenticationSuccessHandler" />
<logout logout-success-url="/public/login.xhtml" />
<csrf disabled="true" />
</http>
<b:bean id="authenticationSuccessHandler"
class="br.com.jway.security.UrlAuthenticationSuccessHandler" />
<!-- Select users and user_roles from database -->
<authentication-manager>
<authentication-provider>
<password-encoder hash="md5" />
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT login,senha,role FROM usuario WHERE login = ?"
authorities-by-username-query="SELECT login, role FROM usuario WHERE login = ? " />
</authentication-provider>
</authentication-manager>
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
JDBC
(UserDetailsService
)的标准JdbcDaoImpl
实施要求表格为用户加载密码,帐户状态(启用或禁用)以及权限列表(角色)
问题是您的查询不加载帐户状态:
users-by-username-query="SELECT login,senha,role FROM usuario WHERE login = ?
此查询应提供username
,password
和enabled
。我想你应该用role
替换enabled
,我不知道senha
实际上是什么!
答案 1 :(得分:0)
扩展您的查询以获取enabled
属性:
users-by-username-query :用于在给定用户名的情况下查询用户名,密码和启用状态的SQL语句。默认值为
select username, password, enabled from users where username = ?
中找到详细信息