我有一个grails站点(带有spring security 1.2.6的grails 2.0)登录,它应该重定向,具体取决于通过URL传递的参数。
例如,如果您转到'/'
,则会转到标准'login/auth'
,但如果您转到'/?org=abccorp'
,您将被重定向到'landing/index'
。成功登录后,您将根据通过网址和安全角色传入的参数被带到网站的不同部分。
到目前为止,我已经能够在有人成功登录的正常情况下使一切正常工作。我的问题来自于如果某人登录失败,则春季安全会重定向到默认的'login/authfail'
操作,无法找到原始网址或参数。
据说有一种获取这些东西的方法,但我发现的所有东西都已被弃用,移动或根本不存在。
有没有办法获得最初传入的参数?我可以在电话之间或类似的地方把它们保存下来吗?
答案 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()
}
}
其中MyRedirectStrategy
是DefaultRedirectStrategy
的自定义子类(在src / groovy或src / java中),它使用请求网址来确定重定向网址。