登录失败后自定义URL重定向与params

时间:2015-10-28 20:20:53

标签: grails spring-security

我需要在春季安全重定向到login/authfail之后添加url参数,例如<appname>/login/authfails?id=2523452345

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

只需使用自定义AuthenticationFailureHandler实施(包含您想要的任何重定向参数),而不是默认SimpleUrlAuthenticationFailureHandler

答案 1 :(得分:1)

这已经得到了回答和接受,但我想更深入。

首先,我扩展了默认的Spring-Security AjaxAwareAuthenticationFailureHandler

public class  MyAuthenticationFailureHandler extends AjaxAwareAuthenticationFailureHandler implements InitializingBean {

  def staticFailureUrl

    @Override
    public void onAuthenticationFailure(final HttpServletRequest request, final HttpServletResponse response,
            final AuthenticationException exception) throws IOException, ServletException {

        // Logic to generate id that will be passed with the redirect
        defaultFailureUrl = staticFailureUrl + '&id=2523452345'

        super.onAuthenticationFailure(request, response, exception);
    }

然后我使用resources.groovy使用我自己的实现覆盖默认的authenticationFailureHandler bean。

beans = {
    authenticationFailureHandler(MyAuthenticationFailureHandler) {
        redirectStrategy = ref('redirectStrategy')
        staticFailureUrl = application.config.failureHandler.staticFailureUrl
        useForward = application.config.failureHandler.useForward
        ajaxAuthenticationFailureUrl = application.config.failureHandler.ajaxAuthFailUrl
        exceptionMappings = application.config.failureHandler.exceptionMappings
        allowSessionCreation = application.config.failureHandler.allowSessionCreation
    }
}

此bean在Config.groovy

中使用了多个配置设置
failureHandler {
    staticFailureUrl = '/login/authfail?login_error=1'
    ajaxAuthFailUrl = '/login/authfail?ajax=true'
    exceptionMappings = [:]
    useForward = false
    allowSessionCreation = true
}

其中大多数已在Spring-Security插件的DefaultSecurityConfig.groovy类中重复,但我不确定如何访问Config.groovy中的值。

您可以自己实现该方法,而不仅仅使用super.onAuthenticationFailure(request, response, exception),而且可以摆脱defaultFailureUrl,它似乎有点'hacky'可以任意改变。

相关问题