Grails Spring Security插件 – 登录表单重定向到ajaxAuth

我有一个使用grails
spring security 2.0.RC-5插件的Grails应用程序.

假设我打开了2个标签.

一旦我退出应用程序,就会在第一天.然后,在第二个,我单击一个按钮,对应用程序进行AJAX调用.

因为我已经注销,所以入口点将是LoginController.authAjax.
此方法中插件生成的默认代码是

response.setHeader 'Location', SpringSecurityUtils.securityConfig.auth.ajaxLoginFormUrl
response.sendError HttpServletResponse.SC_UNAUTHORIZED

我在我的ajax电话上得到了401,没关系.
问题来了,现在如果我回到登录页面并重新提交登录表单,我会被重定向到LoginController.authAjax方法.

这个方法中的代码是

render([success: true, username: springSecurityService.authentication.name] as JSON)

反过来,这不会将我重定向到应用程序中的仪表板页面,而是呈现
{ “成功”:真正的 “用户名”: “USER1”}

显然,这不是预期的行为.我该如何解决?
谢谢

最佳答案 这是Spring Security Core插件的默认行为,当您注销并尝试访问受保护的URL时,它会将该URL存储到会话中,并在成功登录后重定向回到您的同一URL,以便用户不会必须手动转到原始请求的页面.

如果要永久禁用此行为,可以在Config.groovy中指定以下配置:

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true

在这里看到它http://grails-plugins.github.io/grails-spring-security-core/guide/urlProperties.html

但是如果你想要有条件地禁用它,你也可以通过清除上面提到的会话变量来做到这一点:

在您的authAjax操作中:

def authAjax() {
    if (request.xhr) {  // For any AJAX request or any condition you want
        session["SPRING_SECURITY_SAVED_REQUEST"] = null
    }
}
点赞