我正在项目中使用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将不再附加到会话,因此我不会向用户显示错误。但是,似乎异常仍然存在于刷新之外。我的假设不正确吗?我不应该这样使用我的请求对象吗?
谢谢! idbentley
答案 0 :(得分:2)
嗯,是否有任何代码清除会话中的AUTHENTICATION_EXCEPTION
?在另一次授权尝试成功之前,Spring Security可能不会自动从会话中清除它 - 我认为您假设此会话属性被自动删除。
您可能希望自己从会话中清除此属性,以便不再显示它。