Spring Security AuthenticationException是否持久?

时间:2011-05-20 15:02:55

标签: java spring login spring-security

我正在项目中使用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

1 个答案:

答案 0 :(得分:2)

嗯,是否有任何代码清除会话中的AUTHENTICATION_EXCEPTION?在另一次授权尝试成功之前,Spring Security可能不会自动从会话中清除它 - 我认为您假设此会话属性被自动删除。

您可能希望自己从会话中清除此属性,以便不再显示它。