Java SpringSecurity3.x+mvc-异常处理

Java SpringSecurity3.x+mvc-异常处理,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我是SpringSecurity3.x的新手,所以我的问题可能有点傻 用例: 登录页面,客户输入错误的数据,例如错误的密码,那么登录页面上是否应该显示一些错误消息 情景: 登录的处理最终在我的客户身份验证提供程序中完成,例如AuthenticationServiceException。 然后客户再次被重定向到登录页面 问题: 我已经为登录操作设置了controller@RequestMappingvalue=login。 我想知道引发了异常,我想在登录操作中显示一些文本,例如exception.

我是SpringSecurity3.x的新手,所以我的问题可能有点傻

用例: 登录页面,客户输入错误的数据,例如错误的密码,那么登录页面上是否应该显示一些错误消息

情景: 登录的处理最终在我的客户身份验证提供程序中完成,例如AuthenticationServiceException。 然后客户再次被重定向到登录页面

问题: 我已经为登录操作设置了controller@RequestMappingvalue=login。 我想知道引发了异常,我想在登录操作中显示一些文本,例如exception.getLocalizedMessage。 怎样 如何捕获此AuthenticationServiceException,以让控制器知道要显示什么


谢谢

当身份验证失败时,异常将使用名称SPRING\u SECURITY\u LAST\u exception存储在模型中。您可以在登录页面上显示异常消息,以下示例来自Velocity视图:

#if ($SPRING_SECURITY_LAST_EXCEPTION)
<p class="error">${SPRING_SECURITY_LAST_EXCEPTION.message}</p>
#end

我在控制器中使用以下命令:

Object lastException = webRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION,  WebRequest.SCOPE_SESSION);
if (lastException != null) {
    ....
}
那么我有权访问最后一个异常。 但整个概念有点愚蠢,例如,此异常仍保留在会话中,因此每次用户刷新时都会显示它。
应该有更好的解决方案……

Spring Security已经为您处理了这个问题,并且已经暴露了一条本地化的错误消息。为什么要重新发明它?此外,你不想确切地说出什么是错误的,即未知的用户名或错误的密码,因为这是黑客继续进行的提示。您想要一条通用错误消息,如未知用户名/密码组合。我如何访问它?我如何知道抛出了异常?spring安全性在哪里处理这个问题?我使用如下内容:Object lastException=webRequest.getAttributeWebAttribute.AUTHENTICATION\u异常,webRequest.SCOPE\u会话;什么是真正愚蠢的。例外情况仍然存在于会话中,即使您在登录页面上刷新了错误,等等。@squirrelinethbarel随时发布您的方法作为自己的答案。