我在一个项目上使用Spring MVC和Spring Security,并使用它实现登录表单。我遇到了一种奇怪的行为,这是我所料想不到的,我想知道是否有办法避免这种情况。
当登录表单上出现身份验证错误时,我的控制器中有一个方法可以处理该错误:
@RequestMapping(value="/failed", method = RequestMethod.GET)
public String showLoginFailurePage(Model model, HttpServletRequest request) {
String authExClass = "";
AuthenticationException authEx = (AuthenticationException) request.getSession().getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
if (authEx != null) {
authExClass = authEx.getClass().getSimpleName();
}
model.addAttribute("authExClass", authExClass);
return LOGIN_PAGE;
}
最初可以正常工作,允许我在发生身份验证错误时显示错误。但是,如果刷新页面,则我希望AuthenticationException不再附加到会话上,因此不会向用户显示错误。但是,似乎异常一直持续到刷新为止。我有不正确的假设吗?我不应该这样使用我的请求对象吗?
谢谢!
伊德本特利
最佳答案
那么,是否有任何代码从会话中清除AUTHENTICATION_EXCEPTION
?在再次尝试成功授权之前,Spring Security可能不会自动从会话中清除此会话-我认为您假设此会话属性已自动删除。
您可能希望自己从会话中清除此属性,以使其不再显示。