0

在这里,我制作了一个完全基于远程的应用程序。

仅加载一次所有 js 和 css。所以我想要会话过期的解决方案。

意味着当 ajax 请求到达控制器时,它将首先被验证,如果会话过期,那么我想重定向到登录页面重新登录。

[编辑-@布拉德]

让我们尝试澄清您的要求..

1) 通过 Ajax 向服务器发出请求

2) 服务器响应 HTTP 401,未授权

3) Ajax 识别 401 状态并重定向到登录页面

4)登录成功,

5)然后执行旧请求。表示第 1 步请求执行。

6)但我不想执行第 1 步请求,但想每次都执行主页。

4

2 回答 2

2

您可以在每次请求进入您的操作之前使用过滤器拦截器。

更好的方法是使用可用于 grails 的 apache-shiro 身份验证插件。

看到这个:用于 Grails 的 Apache Shiro 集成

在您的应用程序中安装它并进行配置。它很简单,可以满足您的大部分身份验证要求。

于 2012-05-25T07:59:13.190 回答
2

一种方法是让您的客户端 AJAX 代码检查HTTP 401 响应代码,这意味着您的用户会话已超时并且他们不再登录。

使用 JQuery...

$.ajax({
    type: "post", url: "/SomeController/SomeAction",
    success: function (data, text) {
        //...
    },
    error: function (request, status, error) {
        // look for status of 401 and redirect to login
    }
});

当然,您只需确保您的 Web 应用程序返回适当的状态代码。我发现这篇关于这个主题的文章发人深省。

还有一些关于类似问题的好信息

[编辑]

好的,从您在第 3 步更新的问题)这是通过 ajax 请求发生的,我希望您的用户看不到登录页面,因为您的 ajax 处理代码将收到 401 响应,您可以决定不显示它。然后,您可以将用户浏览器重定向到您选择的登录 URL。在这种情况下,您将重定向到主页,或将登录页面配置为接受额外的 URL 参数,告诉它您希望用户在登录后被发送到的位置。

于 2012-05-25T08:34:25.950 回答