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

标签 grails spring-security grails-plugin

我有一个使用 grails 的 Grails 应用程序 Spring 安全 2.0.RC-5 插入。
假设我打开了 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"}
显然,这不是预期的行为。我该如何解决?
谢谢你

最佳答案

这是 的默认行为Spring 安全核心 插件,当您注销并尝试访问 protected URL 时,它将该 URL 存储到 session 中,并在成功登录后重定向回相同的 URL,这样用户就不必手动转到原始请求的页面。

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

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true

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

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

在您的 authAjax行动:
def authAjax() {
    if (request.xhr) {  // For any AJAX request or any condition you want
        session["SPRING_SECURITY_SAVED_REQUEST"] = null
    }
}

关于Grails Spring Security 插件 - 登录表单重定向到 ajaxAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777614/

相关文章:

grails - 从 Spock 规范中提取规范

authentication - 将 Tomcat NTLM 与 Spring Security 结合使用

eclipse - 如何在Eclipse中安装Grails插件?

grails - 新的grails 3 intellij项目 “Content is not allowed in prolog”

html - 无法将我的应用程序加载到 IFRAME 中

grails - Grails Spring安全性插件身份验证失败

Grails Spring Security 插件 - 用户名转义问题

grails - Grails 插件服务与 GORM 的集成测试应该有效吗?

grails - 开始使用 Mail 插件构建 Grails 2 Web 应用程序时出错

intellij-idea - Grails 设置同步失败。无法创建/Users/<username>/.grails/scripts/IdeaPrintProjectSettings.groovy