3

我可能不会获得帮助第一次刺伤所需的所有必要信息,但我会尽我所能,并在我们进行时对其进行编辑。

我有一个使用 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% 确定的原因。

我的问题

  1. 是 mod_proxy 导致 302
  2. 我该如何解决这个问题,以便它像在本地一样工作,但仍然使用 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 的任何调试,所以我什至没有到达那里。

4

1 回答 1

0

Ajax 调用的代码:

statusCode: {
    401: function(){
        // redirect code to login page
    }
}
于 2017-12-11T17:05:54.397 回答