我可能不会获得帮助第一次刺伤所需的所有必要信息,但我会尽我所能,并在我们进行时对其进行编辑。
我有一个使用 Spring-Security-Core 插件的 Grails 1.3.7 应用程序。我正在处理处理会话超时和 ajax 请求的代码。在 LoginController 中,我有以下内容:
def authAjax = {
session.SPRING_SECURITY_SAVED_REQUEST_KEY = null
response.sendError HttpServletResponse.SC_UNAUTHORIZED
}
在全局 JavaScript 文件中,我有以下内容:
$.ajaxSetup({
error: function(xhr, status, err) {
if (xhr.status == 401) {
$('#login-dialog').dialog({ // show ajax login });
}
}
});
当我在本地运行它时,一切都按预期工作。当我的会话超时时,我在 FireBug 控制台中看到一个 401 并且我得到了登录对话框。当我将它部署到我们的登台服务器时,我只得到 302 并且永远不会进入 authAjax,因此永远不会得到 401。
本地开发和登台之间的主要区别在于我使用 mod_proxy 和 apache httpd 来代理请求到 Tomcat。我的假设是这就是为什么我得到 302 而不是 401 但我不是 100% 确定的原因。
我的问题
- 是 mod_proxy 导致 302
- 我该如何解决这个问题,以便它像在本地一样工作,但仍然使用 mod_proxy。
更新:
根据最近在本地的评论,当我收到 401 时,我看到了这个:
POST https://localhost:8080/admin/bookProject/edit 302 Moved Temporarily
GET http://localhost:8080/login/authAjax 401 Unauthorized
我看到了来自 authAjax 方法的调试
在登台服务器上,我得到:
POST https://server.com/admin/bookProject/edit 302 Moved Temporarily
而且我没有看到来自 authAjax 的任何调试,所以我什至没有到达那里。