我可能不会获得帮助第一次尝试所需的所有信息,但我会尽我所能,并在我们进行过程中对其进行编辑。
我有一个使用 Spring-Security-Core 插件的 Grails 1.3.7 应用程序。我正在编写处理 session 超时和 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 });
}
}
});
当我在本地运行此程序时,一切都会按预期进行。当我的 session 超时时,我在 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 的任何调试,所以我什至没有到达那里。
最佳答案
Ajax 调用代码:
statusCode: {
401: function(){
// redirect code to login page
}
}
关于grails - 本地 401 工作,临时服务器得到 302,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017756/