基于Ajax的应用程序,并希望在会话过期后重定向到登录页面

时间:2012-05-25 07:52:49

标签: ajax grails grails-2.0

我在这里创建一个完全基于远程的应用程序。

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

表示当ajax请求到达控制器时,它将首先进行身份验证,如果会话已过期则会进行会话,然后我想重定向到登录页面relogin。

[编辑 - @Brad]

让我们试着澄清你的要求..

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

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

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

4)登录成功,

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

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

2 个答案:

答案 0 :(得分:2)

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

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

请参阅:Apache Shiro Integration for Grails

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

答案 1 :(得分:2)

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

使用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
    }
});

当然,您只需确保您的网络应用返回相应的状态代码即可。我发现this article在这个问题上引人深思。

similar question

还有一些很好的信息

<强> [编辑]

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