java Spring Security在输入无效密码后无法登录
我刚刚设置了Spring Security,它工作得很好。我可以使用自定义表单登录和注销。我已连续多次登录,然后退出,没有问题。奇怪的是,如果我尝试使用错误的密码登录,我将无法再次登录-每次尝试登录之后,我都会进入“loginFailed”页面。有人知道如何解决这个问题吗
这是我的安全配置。xml:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">
<http use-expressions="true">
<intercept-url pattern="/secureA.htm" access="isAuthenticated()" />
<intercept-url pattern="/secureB.htm" access="isAuthenticated()" />
<form-login login-page="/login.htm" default-target-url="/secureA.htm"
authentication-failure-url="/loginFailed.htm"/>
<logout logout-success-url="/login" />
</http>
<authentication-manager>
<authentication-provider>
<password-encoder hash="sha">
</password-encoder>
<user-service>
<user name="user" password="pass"
authorities="ROLE_USER, ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
我的登入表格:
<form action="<c:url value='j_spring_security_check' />" method="post">
Username: <input type="text" name="j_username" /><br/>
Password: <input type="password" name="j_password" /><br/>
<input type="submit" value="Login" /><br/>
</form>
我的登录控制器:
@Controller
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String welcome(ModelMap m) {
return "login";
}
@RequestMapping(value = "/loginFailed", method = RequestMethod.GET)
public String failed(ModelMap m) {
m.addAttribute("error", "Invalid username or password");
return "login";
}
@RequestMapping("logout.htm")
public String logout(ModelMap m) {
return "redirect:login.htm";
}
}
# 1 楼答案
如果返回到登录的同一页面,则模型将被执行。由于您要向该模型添加一个属性,因此可能要检查该属性是否已在视图页面上设置。一旦设置了它,在清除会话对象之前,不会有任何东西将其取消设置
要确认,请更改此选项:
然后检查你的控制台
# 2 楼答案
嗯,我不知道是什么问题,但我能解决它。我刚找到一个比较老的SO帖子:Spring security blocks user after failed login。Timh关于切换到Spring 3.0.7的回答。发行版(3.0.6版)对我很有用。对不起,我发了两封信
如果有人知道为什么会在3.0.6中出现这种情况,我很想知道
# 3 楼答案
这是因为: https://jira.springsource.org/browse/SEC-1493
组织。springframework。安全果心用户详细信息。删除凭据() 正在身份验证时调用
对于AuthenticationManager,解决方案应该是parameter erase credentials=“false”,但显然它在Spring 3.1.0或3.1.3中对我不起作用
解决方法是在每个身份验证请求上重新加载用户的详细信息