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