Java 记住在未受保护的URL上登录失败后,使用spring security重定向到的原始页面

Java 记住在未受保护的URL上登录失败后,使用spring security重定向到的原始页面,java,login,struts2,spring-security,Java,Login,Struts2,Spring Security,我使用的是SpringSecurity和Struts2。我们的大多数页面都包含一些未受保护的内容,这些内容与一些受保护的内容(用户控件)混合在一起,因此不像示例中那样,您访问某个页面时,spring security会截获所有内容。相反,我希望能够使用登录表单,您可以通过按下任何页面上的登录按钮来访问该表单。成功验证后,应将您重定向到原始页面 这就是我被难倒的地方。发送要重定向到的URL可以通过将其添加到表单操作中来完成,如下所示: <form action="/j_spring_secu

我使用的是SpringSecurity和Struts2。我们的大多数页面都包含一些未受保护的内容,这些内容与一些受保护的内容(用户控件)混合在一起,因此不像示例中那样,您访问某个页面时,spring security会截获所有内容。相反,我希望能够使用登录表单,您可以通过按下任何页面上的登录按钮来访问该表单。成功验证后,应将您重定向到原始页面

这就是我被难倒的地方。发送要重定向到的URL可以通过将其添加到表单操作中来完成,如下所示:

<form action="/j_spring_security_check?spring-security-redirect=${url}" method="POST">
     <...>
 </form>

问题是,在这次登录失败后,spring security重定向到同一个页面(它是在应用程序上下文中设置的),我无法检索传递给
spring security redirect
的url。如果这是访问我自己的一个类,我通常只将其作为表单中的隐藏参数或登录控制器的请求参数传递。但是由于SpringSecurity是做重定向的那个,我有点迷路了


到目前为止,我提出的唯一解决方案是尝试将此url存储在session中,但在成功完成登录后,也没有很好的方法将其删除。有什么想法吗?

如果您使用Spring Security 3.0,您可以自定义
AuthenticationFailureHandler
。例如,它的默认实现可以配置为使用forward而不是redirect。

它是2.x,但是查看文档,我可能可以在那里执行类似的操作,我会看一看。