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

时间:2015-09-25 08:07:52

标签: grails spring-security grails-plugin

我有一个使用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)

反过来,这不会将我重定向到应用程序中的仪表板页面,而是呈现 {"success":true,"username":"user1"}

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

1 个答案:

答案 0 :(得分:2)

这是 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
    }
}