【发布时间】:2011-08-03 10:43:43
【问题描述】:
我正在使用 Grails 1.3.7 和最新的 spring-security-core 插件。我在我的 LoginController 中实现了以下方法:
def authAjax = {
response.setHeader 'Location', SpringSecurityUtils.securityConfig.auth.ajaxLoginFormUrl
response.sendError HttpServletResponse.SC_UNAUTHORIZED
}
在我的全局 JavaScript 文件中,我有以下内容:
$.ajaxSetup({
error: function(xhr, status, err) {
if (xhr.status == 401) {
// display a login form in a dialog
}
}
});
登录表单是直接来自插件文档的标准登录表单。唯一的区别是我使用 jQuery 提交表单,如下所示:
var params = $('#ajaxLoginForm').serialize();
$.post($('#ajaxLoginForm').attr('action'), params, function(jsonData) {
if (jsonData.success) {
$('#login-dialog').dialog('close');
} else {
alert('TODO: display errors');
}
}, 'json');
问题是我第一次点击登录按钮时,我似乎验证正常,但是从服务器返回的响应是基于Referer请求标头的302重定向。所以我的 $.post() 的主体永远不会被运行。我得到的是 HTML 而不是 JSON。在第二次提交之前,它实际上并没有命中我的 LoginController.ajaxSuccess 方法。我已经阅读并重新阅读了文档,但我一定遗漏了一些东西。
更新:看起来可能不是Referer问题,因为第二次发布表单时,Referer仍然存在。所以我完全不知道为什么我必须提交两次表单才能调用 ajaxSuccess 方法。
【问题讨论】:
标签: jquery ajax authentication grails spring-security