我需要在春季安全重定向到login/authfail
之后添加url参数,例如<appname>/login/authfails?id=2523452345
。
有什么想法吗?
答案 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'可以任意改变。