如何从失败的登录尝试中获取url params

时间:2012-03-29 22:08:26

标签: grails spring-security

我有一个grails站点(带有spring security 1.2.6的grails 2.0)登录,它应该重定向,具体取决于通过URL传递的参数。

例如,如果您转到'/',则会转到标准'login/auth',但如果您转到'/?org=abccorp',您将被重定向到'landing/index'。成功登录后,您将根据通过网址和安全角色传入的参数被带到网站的不同部分。

到目前为止,我已经能够在有人成功登录的正常情况下使一切正常工作。我的问题来自于如果某人登录失败,则春季安全会重定向到默认的'login/authfail'操作,无法找到原始网址或参数。

据说有一种获取这些东西的方法,但我发现的所有东西都已被弃用,移动或根本不存在。

有没有办法获得最初传入的参数?我可以在电话之间或类似的地方把它们保存下来吗?

1 个答案:

答案 0 :(得分:2)

authenticationFailureHandler bean在登录失败时使用org.springframework.security.web.RedirectStrategy实例进行重定向。默认情况下,这是一个org.springframework.security.web.DefaultRedirectStrategy实例,并注册为redirectStrategy bean。因此,您可以用自己的redirectStrategy bean替换authenticationFailureHandler bean。由于您无权访问redirectStrategy,因此替换整个Authentication bean看起来并不实际,因此您不会知道它是失败还是成功重定向。

为了避免重新定义整个authenticationFailureHandler bean,我只需更改BootStrap.groovy中的bean。它是这样的(我没有测试过,所以可能会有点偏差)

import com.foo.bar.MyRedirectStrategy

class BootStrap {

   def authenticationFailureHandler

   def init = { servletContext ->
      authenticationFailureHandler.redirectStrategy = new MyRedirectStrategy()
   }
}

其中MyRedirectStrategyDefaultRedirectStrategy的自定义子类(在src / groovy或src / java中),它使用请求网址来确定重定向网址。